Mysql学习

1. 关键字与函数名称全部大写

2. 数据库名称、表名称、字段名称全部小写

3. SQL语句必须以分号结尾

一、数据库基本操作

1. 创建、查看数据库

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
# 其中{}中 DATABASE 和 SCHEMA 两个作用是一样的,一般是选择使用DATABASE,中括号可选
# 普通创建数据库dzp的语句
CREATE DATABASE dzp;

mysql> CREATE DATABASE dzp1;
Query OK, 1 row affected (0.03 sec)

# 创建数据库成功后,查看数据库使用
SHOW DATABASES;

mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| dzp |
| dzp1 |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)

mysql>


# 如果已经连接了数据库,use dzp;想要查看当前数据库的话可以直接:
select database()

mysql> select database();
+------------+
| database() |
+------------+
| dzp1 |
+------------+
1 row in set (0.00 sec)

mysql>

练习1:

# 已经存在一个数据库db1,如果这时候重复创建会报错
CREATE DATABASE db1;
ERROR 1007:database exists # 而如果加上IF NOT EXISTS,就不会报错,但是会有一个warning警告
CREATE DATABASE IF NOT EXISTS db1;
SHOW WARNINGS;

练习2:

CHARACTER SET 是设置数据库的编码,上面创建的时候没有设置,但是默认是会自带的,查看方式是直接查看我们创建数据库的命令,默认是latin1:

SHOW CREATE DATABASE t1;

现在创建一个手动指定编码方式的数据库

CREATE DATABASE dzp2 CHARACTER SET latin1;

SHOW CREATE DATABASE t2;
# 查看到数据库的编码是latin1

练习3:

修改数据量编码

ALTER {DATABASE | SCHMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name

# 举例
ALTER DATABASE t1 CHARACTER SET = utf8;
# 重新查看数据库编码
查看t1编码:
SHOW CREATE DATABASE t1;
# 可以看到数据库编码已经变为utf8

2. 删除数据库

DROP {DATABASE | SCHAMA} [IF EXISTS] db_name

#下面是删除t1数据库
DROP DATABASE dzp;
# 成功,查看一下,已经没有数据库dzp了
SHOW DATABSES;

3. 查看数据库安装路径

SHOW variables like "%datadir";

4. 修改密码

# 5.7.6以上版本:
set password for 'root'@'localhost' = 'Password123';
# 如果是想修改当前用户的密码就直接执行:
set password = 'Password123'; # 5.7.6以下版本:
set password for 'root'@'localhost' = password('Password123');

二、 数据类型

1. 整型

默认是有符号位的,如果想要表示无符号位比如年龄这个字段,肯定是没有负数的,可以加UNSINGED,即:

age TINYINT UNSINGED

2. 浮点型

3. 日期类型

在实际使用中,由于时区问题,时间类型不经常使用,而是用整型或者字符型来代替。以避免时区不同造成的问题

4. 字符型

# char(5)指定长度,如果没有达到执行长度则自动用空格补齐,假设现在存储的是abc不到5个字符串,则就会补空格"abc  "
# varchar(5)则是按照实际长度来存,不会像char(5)这样补空格
# ENUM('男','女')枚举值只能从枚举值里选择
# SET('A','B','C'),可以选择AB,BC

三、 数据表

通过USE打开某个数据库,先查看有哪些数据库,SHOW DATABASES; 假设有一个t2数据库,打开t2数据库: USE t2;

1. 创建数据表

CREATE TABLE [IF NOT EXISTS] table_name(column_name data_type,......)
# 小括号里写的是列名称和数据类型
mysql> CREATE TABLE tb1(
-> username VARCHAR(20),
-> age TINYINT UNSIGNED,
-> salary FLOAT(8,2) UNSIGNED
);
Query OK, 0 rows affected(0.25 sec)

2. 查看数据表

SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]
# 可选的FROM是可以查看其它数据库的表

3. 查看数据表的创建命令

SHOW CREATE TABLE tbl_name

从以上结果可以看到,数据库的引擎是InnoDB

4. 查看数据表结构

SHOW COLUMNS FROM tbl_name;
# 查看上面创建的表tb1结构,可以看到字段信息,字段类型等

5. 插入记录INSERT

INSERT [INTO] tbl_name [(col_name,...,...)] VALUES (val,...)
举例:
SHOW CLOUMNS FROM tb1;
INSERT tb1 VALUES('dzp',30,12000);
INSERT tb1 (username,salary) VALUES('lsy',10000);

6. 记录查找SELECT

SELECT expr,...,... FROM tbl_name;

7. 空值与非空

NULL, 字段值可以为空

NOT NULL, 字段值禁止为空

# 字段类型默认为空

INSERT INTO tb3(username) VALUES('TOM1');

8. 自动编号 AUTO_INCREMENT

# AUTO_INCREMENT
# 自动编号, 且必须与主键组合使用
# 默认情况下, 起始值为1, 每次的增量为1
# 必须和主键配合使用, 例子在下面的主键中

9. 主键 PRIMARY KEY

主键约束

每张数据表只能存在一个主键

主键保证记录的唯一性

主键自动为 NOT NULL

mysql> CREATE TABLE tb4(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(30) NOT NULL
);
Query OK, 0 rows affected(0.27 sec) # 其中,AUTO_INCREMENT是自动编号, PRIMARY KEY是主键可以缩写成KEY SHOW COLUMNS FROM tb4;

# 对这个表插入的时候不需要给主键赋值,因为设置了自动编号,主键可以单独的使用而不必须和自动编号一起使用
INSERT tb4 VALUES('tom');
INSERT tb4 (username) VALUES('SIXSIXSIX');
INSERT tb4 (username) VALUES('old-big');
# 注意要把字段名带上,不然会报错

注意: 主键PRIMARY KEY不一定要和 自动编号 AUTO_INCREMENT 一起使用,可以单独使用。

但是自动编号 AUTO_INCREMENT不能单独使用,一定要和主键一起使用才行

10. 唯一约束 UNIQUE KEY

唯一约束

唯一约束可以保证记录的唯一性

唯一约束的字段可以为空值(NULL)

每张数据表可以存在多个唯一约束

mysql> CREATE TABLE tb5(
-> id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
-> username VARCHAR(20) NOT NULL UNIQUE KEY,
-> age TINYINT UNSIGNED
);
# 测试插入相同数据到唯一约束字段:

# 查看字段信息,可以看到username字段是唯一约束字段
SHOW COLUMNS FROM tb5; # 插入相同的值
INSERT INTO tb5(username, age) VALUES('TOM',22);
Query OK, 1 rows affected (0.03 sec)
# 报错
INSERT INTO tb5(username, age) VALUES('TOM',22);
Duplicate entry 'TOM' for key 'username'

11. 默认值 DEFUALT

默认值

当插入记录时,如果没有明确为字段赋值,则自动赋予默认值

# 创建数据表tb6
mysql> CREATE TABLE tb6(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(20) NOT NULL UNIQUE KEY,
-> sex ENUM('','','') DEFAULT ''
); # 查看数据表tb6的字段信息
# SHOW COLUMNS FROM tb6; # 测试插入一条没有配置sex的数据
mysql> INSERT INTO tb6(username) VALUES('tom'); # 然后查看记录, 可以看到字段sex字段自动赋值3
mysql> SELECT * FROM tb6;

四、 约束及修改数据表

1. 外键约束

约束保证数据的完整性和一致性

约束分为表级约束和列级约束

约束类型包括:

  NOT NULL (非空约束)

  PRIMARY KEY (主键约束)

  UNIQUE KEY (唯一约束)

  DEFAULT(默认约束)

  FOREIGN KEY(外键约束)

前面都已经学过前4种约束了,现在开始学习外键约束

FOREIGN KEY

保持数据一致性,完整性

实现一对一或者一对多的关系

 先创建一个父表,然后再创建一个子表users字段pid(即外键列)关联父表的id(即参照列)。

这里pid字段的数据类型要注意和父表的id字段一样,例如不加UNSIGNED就会报错,或者数据类型改成BIGINT也会报错,不过如果字段类型是字符类型的时候可以不同!!记住数字情况下数据类型必行相同!!

查看约束和索引

SHOW INDEXES FROM tbl_name

如下可以看到有一个id的索引(主键自动创建索引!记住)

查看users的创建语句:SHOW CREATE TABLE users; 可以看到系统为我们创建的pid索引

外键约束的参照操作

上面的意思是,在更新父表的时候,字表是否也进行相应的操作

实验:ON DELETE CASCADE父表删除会自动删除子表匹配的行,ON UPDATE CASCADE自然就是更新了。

再创建一张子表users1,外键仍然选择是pid

往父表provinces插入3条记录

往子表users插入记录,其中的报错是因为外键7没有对应父表的id

查看子表的内容:

发现没id没有连续,这是因为我上面插入记录的时候有一条没有成功,但是id是已经自动创建了,所以记住,就算失败也会占用一个id

现在开始删除父表provinces中的一条记录,id=2

修改数据表

1、添加单列:

ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]

可以看到添加的列到最后一列了,再加一列这次放在开头:

2、添加多列

ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,....)

和添加单列语法一样只是用,逗号隔开每个多个添加列

删除列:

删除多列:

同时删除和添加列:

添加主键约束:

唯一约束可以有多个,主键约束只有一个:

添加唯一约束:

添加外键约束:添加外键的字段,父表和子表的id数据类型要一致

添加和删除默认约束

删除主键约束:不用指定字段,因为主键约束是唯一的

删除唯一约束或索引:

删除外键,先查看创建表的语句,然后再删除外键

mysql全面整理(用于复习、查阅)--正在更新的更多相关文章

  1. Mysql基本操作整理

    1.登录数据库 格式: mysql -h主机地址 -u用户名 -p用户密码 –P端口 –D数据库 –e “SQL 内容”>mysql -uroot -p 数据库名称~~~~~~~~~~~~~~~ ...

  2. MySQL 笔记整理(16) --“order by”是怎么工作的?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 16) --“order by”是怎么工作的? 在林老师的课程中,第15 ...

  3. MySQL基础整理(一)之SQL基础(未完成)

    大家好,我是浅墨竹染,以下是MySQL基础整理(一)之SQL基础 1.SQL简介 SQL(Structure Query Language)是一种结构化查询语言,是使用关系模型的数据库应用语言. 2. ...

  4. 最全mysql笔记整理

    mysql笔记整理 作者:python技术人 博客:https://www.cnblogs.com/lpdeboke Windows服务 -- 启动MySQL net start mysql -- 创 ...

  5. Mysql自序整理集

    1.事务 mysql事务是用于处理操作量大.复杂性高的数据 1. 事务特性 原子性:保证每个事务所有操作要么全部完成或全部不完成,不可能停滞在中间环节:如事务在执行过程中出现错误,则会回滚到事务开始之 ...

  6. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  7. mysql中timestamp的自动生成与更新

    转自:mysql中timestamp的自动生成与更新 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样.1.自动UPDATE 和INSERT 到当前的时间:表:----------- ...

  8. MySQL 安全整理

    MySQL 安全整理 关闭外网的端口访问. 使用高位的端口号. 如果需要外网访问不给最高的权限. 如果需要外网访问也是绑定客户端. To be continued

  9. PHP调用mysql函数整理

    mysql函数整理 名称:mysql_connect() 用途:打开非持久的 MySQL 连接.如果成功,则返回一个 MySQL 连接标识,失败则返回 FALSE. 语法:mysql_connect( ...

随机推荐

  1. Oracle备份的几种方式

    这里使用Oracle 12C来大概演示说明一下rman的基本用法,这里不会深入讨论,因为本人也只是刚刚才接触,只是结合了网上的一些文章以及自己的实践来总结并拿出来大家学习,谢谢 目录 一.关于备份与恢 ...

  2. JSON HiJacking攻击

    JSON劫持类似于CSRF攻击,为了了解这种攻击方式,我们先看一下Web开发中一种常用的跨域获取数据的方式:JSONP. 先说一下JSON吧,JSON是一种数据格式,主要由字典(键值对)和列表两种存在 ...

  3. 【转】Python编程: 多个PDF文件合并以及网页上自动下载PDF文件

    1. 多个PDF文件合并1.1 需求描述有时候,我们下载了多个PDF文件, 但希望能把它们合并成一个PDF文件.例如:你下载的数个PDF文件资料或者电子发票,你可以使用python程序合并成一个PDF ...

  4. macos下如何解决无法写ntfs格式的u盘或硬盘?

    答:macos原生支持,可以通过脚本卸载再重新挂载为可读写即可,脚本在此

  5. leetcode 290. Word Pattern 、lintcode 829. Word Pattern II

    290. Word Pattern istringstream 是将字符串变成字符串迭代器一样,将字符串流在依次拿出,比较好的是,它不会将空格作为流,这样就实现了字符串的空格切割. C++引入了ost ...

  6. .NET Core入门程序

    易百教程 https://www.yiibai.com/dotnet_core/dotnet_core_getting_started.html

  7. 【Java】阿里巴巴Java开发手册

    阿里巴巴Java开发手册 下载地址:https://github.com/alibaba/p3c 阿里巴巴代码规范检查插件p3c 下载地址:https://github.com/alibaba/p3c

  8. 报错:The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.

    报错背景: CDH中集成hive插件,启动报错. 报错现象: [main]: Metastore Thrift Server threw an exception... javax.jdo.JDOFa ...

  9. UITableView实现行纵向颜色渐变

    实现效果如下: 其实实现很简单,开始觉得使用颜色值和tableView的indexPath.row挂钩使用即可 或者使用CAGradientLayer实现渐变 最后使用alpha实现即可.需要注意的是 ...

  10. 【JS新手教程】LODOP打印复选框选中的内容

    在html中,复选框是常见的使用之一,本文介绍如何获取选中的复选框的值,并用LODOP打印.给需要为一组的复选框,复选框的checkbox设置相同的name属性,设置不同的id,然后设置需要的valu ...