一、MySQL 概述 / 安装

1.1、MySQL 阐述

  • MySQL 是一种 DBMS,而且是一种一个小型的开源的关系型数据管理系统。
  • 轻量级、小型的数据库
  • 开源免费(6版本之前免费)
  • 所属于Oracle公司

1.2 、MySQL 安装

1、MySQL 下载地址

2、Windows 下安装 MySQL

  • 将下载文件安装到电脑中,打开安装程序。按照提示依次执行下一步,注意一下信息:
    1)Choosing a setup type:选择安装类型,安装类型共有5种,我们选择“Developer Default”即可。
    2)Type and Networking:选择运行方式,共有2种,我们选择标准类型“Standalone…”即可,第二种是沙盒运行。
    3)Type and Networking:选择服务器配置,“Developer Machine”选项代表典型个人桌面工作站,在3种类型中,占用最少的内存,一般选择此选项。
    4)Accounts and Roles:设置账户,在这里设置root密码,不要忘记了哦。
    5)一路Next,即可安装成功。

3、Linux 下安装 MySQL

  • 通过secureCRT工具连接Linux系统
  • 上传 mysql 的安装包
alt + p -------> put d:/setup/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
  • 解压 mysql 的安装包
mkdir mysql
tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar -C mysql/
  • 安装客户端
cd mysql/
rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm --force --nodeps
  • 安装服务端
rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm --force --nodeps
  • 修改mysql默认字符集
vi /etc/my.cnf

添加如下内容:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

-- 需要在最下方填写
[client]
default-character-set=utf8
  • 启动mysql服务
service mysqld start
  • 登录mysql
mysql -u root -p  敲回车,输入密码
初始密码查看:cat /var/log/mysqld.log
在root@localhost:   后面的就是初始密码
  • 修改mysql登录密码
set global validate_password_policy=0;

set global validate_password_length=1;

set password=password('密码');
  • 授予远程连接权限
//授权
grant all privileges on *.* to 'root' @'%' identified by '密码';
//刷新
flush privileges;
  • 关闭Linux系统防火墙
systemctl stop firewalld.service


1.3、MySQL 登录

1、Windows 下启动 MySQL

  • 下载安装包,解压到指定目录
  • 配置环境变量
  • 配置文件
  • 初始化:
  • 以管理员身份打开 CMD ,切换到 MySQL 的 bin 路线下 输入mysqld initialize insecure
  • mysql服务添加到windows服务中
  • 开启mysql客户端
  • window下mysql修改root密码

详细操作链接:

2、管理工具连接

  • sqlyog工具登录mysql

二、DCL 数据控制语言

2.1、概述

  • DCL(Data Control Language):数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。
  • 常用关键字:GRANT, REVOKE 等

2.2、操作语句

详细操作语句请参考以下地址:

三、DDL 数据定义语言

3.1、概述

  • DDL (Data Definition Languages):数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。
  • 常用关键字:create(创建)、drop(删除)、alter(修改)、retrieve(查询)等。

3.2、操作语句

1、Retrieve:查询

库 :操作

  • 查询所有数据库:SHOW DATABASES
  • 查询某个数据库的创建:SHOW CREATE DATABASES 数据 库名称
  • 查询 mysql 数据库的创建格式:SHOW CREATE DATABASES mysql

表 :操作

  • 查询某库下所有的表:SHOW TABLES
  • 查询表结构:DESC 表名
  • 查询某表字符集:SHOW TABLE STATUS FEOM 库名 like ‘ 表名 ’

2、Create:创建

库 :操作

  • 创建数据库(判断,如果不存在则创建):CREATE DATABASE 【 IF NOT EXISTS】 数据库名称
  • 创建数据库,并指定字符集:CREATE DATEBASE 数据库名称 CHARACTER SET 字符集名称

表 :操作

  • 创建表:
CREATE TABLE 表名(
    列名1  数据类型1  约束,
    列名2  数据类型2  约束,
    列名3  数据类型3  约束
    );
    -- 注意:最后一列,不需要加逗号
  • 复制表:CREATE TABLE 表名 LIKE 被复制的表名 (只复制数据结构,不会复制内容)

3、Alter:修改

库 : 操作

  • 不能直接修改 库 名称
  • 修改数据库的字符集:ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称

表 : 操作

  • 修改字段名:ALTER TABLE 表名 CHANGE COLUMN 旧字段 新字段 数据类型
  • 修改表名:ALTER TABLE 表名 RENAME 【TO】 新的表名
  • 修改字段类型和列级约束:ALTER TABLE 表名 MODIFY COLUMN 字段名 约束
  • 添加字段: ALTER TABLE 表名 ADD COLUMN 字段名 数据类型
  • 删除字段:ALTER TABlE 表名 DROP COLUMN 字段名

4、Deop:删除

库 : 操作

  • 删除数据库:DROP DATABASE 数据库名称
  • 删除数据库(判断,如果存在则删除):DROP DATABASE IF EXISTS 数据库名称

表 : 操作

  • 删除表:DROP TABLE 【IF EXISTS】表名

四、DML 数据操作语言

4.1、概述

  • DML(Data Manipulation Language):数据操纵语言,主要用于实现对数据库中的数据进行操作。
  • 常用关键字:INSERT 、UPDATE、DELETE

4.2、INSERT 语句

1、新增方法一:给指定列添加数据

  • 标准语法:INSERTINTO表名(列名1,列名2,.......)VALUES(值1,值2,......);

2、新增方式二:默认给全部列添加数据

  • 标准语法:INSERT INTO表名VALUES(值1,值2,......);

3、新增方式三:批量添加数据

  • 标准语法:INSERTINTO 表名【(列名1,列名2,......)】VALUES(值1,值2,.......),(值1,值2,.......),(值1,值2,.......);

4、注意事项

  • 列名和值得数量以及数据类型要对应
  • 除了数字类型,其他数据类型的数据都需要加单引号(单引导和双引号都可以,推荐单引号)

4.3、UPDATE 语句

1、修改单表数据

  • 标准语法:UPDATE表名SET列名1 = 值1,列名2 = 值2,......WHERE条件

2、修改多表数据

  • 标准语法:UPDATE表名1 别名1,表名2别名2SET列名1 = 值1,列名2 = 值2 WHERT连接条件AND筛选条件

3、注意事项

  • 修改语句必须添加条件,如果不加条件,则所有数据都会被修改。

4.4、DELETE 语法

1、删除方式一:DELETE 语句

  • 单表删除标准语法:DELETEFROM表名【WHERE条件】
  • 多表删除标准语法:DELETE表名1 别名1,表名2别名2FROM 列名1 = 值1,列名2 = 值2 WHERT连接条件AND筛选条件

2、删除方式二:TRUNCATE 语句

  • 标准语法:TRUNCATETABLE表名

3、DELETE 和 TRUNCATE 两种删除方式的区别

  • truncate 不能添加 where 条件,而 delete 可以添加 where 条件
  • truncate 的效率高一点点
  • truncate 删除带自增长的列表后,如果在插入数据,数据从1开始。而 delete 删除带自增长列的表后,如果在插入数据,数据从上一次的断点开始。
  • truncate 删除不能回滚,delete 删除可以回滚。

4、注意事项

  • 删除语句中必须包含条件,如果不加条件,则会将所有数据删除。

五、DQL 数据查询语言

5.1、概述

  • DQL(Data Query Lanuage):数据库查询语言,主要用于数据库中数据的查询。
  • 基本结构:SELECT<字段名>FROM<表或视图名>WHERE<查询条件>
  • MySQL书写顺序
SELECT DISTINCT
    <select_list>
FROM
    <left_table> <join_type>
JOIN
    <right_table>
ON
    <join_condition>
WHERE
    <where_condition>
GROUP BY
    <group_by_list>
HAVING
    <having_condition>
ORDER BY
    <order_by_condition>
LIMIT 
    <start_index,end_index>
  • MySQL默认执行顺序

5.2、基础查询

1、语法

  • 标准语法:SELECT<arg>【REOM 表名】

2、查询全部字段

  • 标准语法:SELECT*(所有列名)FROM表名;

3、查询部分字段

  • 标准语法:SELECT列名1,列名2,......FROM表名;

4、查询‘去重’

  • 标准语法:SELECTDISTINCT列名1,列名2,......FROM表名;
  • 注意:只有全部重复的才能去除。

5、起别名

  • 标准语法:SELECT列名1【AS】别名,列名2【AS】别名2FROM表名;

6、" + " 号作用:只作为运算符

  • SELECT列名 + 10 ;
  • 两个操作数都为数值型,则做加法运算
  • 其中一方为字符型,视图将字符型转数值转换成数值型。如果转换成功继续做加法运算,转换失败字符型数值转换成“ 0 ”。并且只要其中一方为 null,则结果肯定为 null 。

7、CONCAT 关键字拼接两个列

  • 标准语法:SELECTCONCAT('列名1','列名2',......)FROM表名;

8、计算列的值(四则运算)

  • 标准语法:SELECT列名1运算符(+、-、*、/)数值FROM表名
  • 注意:如果某一列为 null ,可以通过 IFNULL(表达式1--想替换的列,表达式2--想替换的值)函数进行替换。

9、注意

  • <arg>:可以是常量、表达式、字段、函数
  • 通过 select 查询的结果,是一个虚拟的表格,并不是真实存在的。

5.3、条件查询

1、条件运算符查询

  • 条件运算符:>、<、>=、<=、=、<>/!=

2、逻辑运算符查询

  • 逻辑运算符:
  • AND 或 && :并且
  • OR 或 ||:或者
  • NOT 或 !:非

3、模糊查询

  • 模糊查询运算符:
  • Between......and......:在某个范围之内(都包含)
  • IN(......):多选一
  • LIKE:占位符:模糊查询,_ 单个任意字符, % 多个任意字符
  • IS NULL:是 null
  • IS NOT NULL:不是 null

4、条件查询语法 & 示例

-- 标准语法
SELECT 列名 FROM 表名 WHERE 条件;

-- 查询库存大于20的商品信息
SELECT * FROM product WHERE stock > 20;

-- 查询品牌为华为的商品信息
SELECT * FROM product WHERE brand='华为';

-- 查询金额在4000 ~ 6000之间的商品信息
SELECT * FROM product WHERE price >= 4000 AND price <= 6000;
SELECT * FROM product WHERE price BETWEEN 4000 AND 6000;

-- 查询库存为14、30、23的商品信息
SELECT * FROM product WHERE stock=14 OR stock=30 OR stock=23;
SELECT * FROM product WHERE stock IN(14,30,23);

-- 查询库存为null的商品信息
SELECT * FROM product WHERE stock IS NULL;
-- 查询库存不为null的商品信息
SELECT * FROM product WHERE stock IS NOT NULL;

-- 查询名称以小米为开头的商品信息
SELECT * FROM product WHERE NAME LIKE '小米%';

-- 查询名称第二个字是为的商品信息
SELECT * FROM product WHERE NAME LIKE '_为%';

-- 查询名称为四个字符的商品信息
SELECT * FROM product WHERE NAME LIKE '____';

-- 查询名称中包含电脑的商品信息
SELECT * FROM product WHERE NAME LIKE '%电脑%';

5.4、排序查询

1、排序查询语法 & 示例

-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 排序的字段|表达式|函数|别名 排序方式1,列名2 排序方式2;

-- 按照库存升序排序
SELECT * FROM product ORDER BY stock ASC;

-- 查询名称中包含手机的商品信息。按照金额降序排序
SELECT * FROM product WHERE NAME LIKE '%手机%' ORDER BY price DESC;

-- 按照金额升序排序,如果金额相同,按照库存降序排列
SELECT * FROM product ORDER BY price ASC,stock DESC;

2、注意事项

  • 关键字:ORDERBY
  • ASC 升序(默认),DESC 降序
  • 多个排序条件时,只有当前边的条件值一样时,才会判断第二条件
  • order by :一般在最后才会执行,limit除外!

5.5 、常见函数

5.5.1、函数概述

  • 类似于 java 中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。
  • 好处:隐藏了实现细节,提高代码的重用性
  • 调用:select 函数名(实参列表) 【from 表名】

5.5.2、单行函数

1、字符函数

  • concat():拼接
  • substr():截取子串
  • upper():转换成大写
  • lower():转换成小写
  • trim():去除前后指定的空格和字符
  • ltrim():去除左边空格
  • rtrim():去除右边空格
  • replace():替换
  • lpad():左填充
  • rpad():右填充
  • length():获取字节个数
  • instr():返回子串第一次出现的索引

2、数学函数

  • round():四舍五入
  • rand():随机数
  • floor():向下取整
  • ceil():向上取整
  • mod():取余
  • truncate():截断

3、日期函数

  • now():当前系统日期 + 时间
  • curdate():当前系统日期
  • curtime():当前系统时间
  • str_to_date():将字符转换成日期
  • date_format():将日期转换成字符

4、流程控制函数

  • if():处理双分支
  • case():处理多个分支

5、其他函数

  • version():获取版本信息
  • database():获取当前库信息
  • user():获取当前连接用户

5.5.3、分组 / 聚合函数

1、函数名

  • count(列名):统计数量(一般选用不为 null 的列)
  • max(列名):最大值
  • min(列名):最小值
  • sum(列名):求和
  • avg(列名):平均值

2、聚合函数语法

-- 标准语法
SELECT 函数名(列名) FROM 表名 【WHERE 条件】;

-- 计算product表中总记录条数
SELECT COUNT(*) FROM product;

-- 获取最高价格
SELECT MAX(price) FROM product;
-- 获取最高价格的商品名称
SELECT NAME,price FROM product WHERE price = (SELECT MAX(price) FROM product);

-- 获取最低库存
SELECT MIN(stock) FROM product;
-- 获取最低库存的商品名称
SELECT NAME,stock FROM product WHERE stock = (SELECT MIN(stock) FROM product);

-- 获取总库存数量
SELECT SUM(stock) FROM product;
-- 获取品牌为苹果的总库存数量
SELECT SUM(stock) FROM product WHERE brand='苹果';

-- 获取品牌为小米的平均商品价格
SELECT AVG(price) FROM product WHERE brand='小米';

3、注意事项

  • 以上五个聚合函数都忽略 null 值,出了 count(*)
  • sum 和 avg 一般用于处理数值型,max、min、count 可以处理任何数据类型
  • 都可以搭配 distinct 使用,用于统计去重后的结果
  • count()的参数可以为字段、、常量值(一般为 1 ),建议使用 count(*)

5.6、分组查询

1、分组查询语法

-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];

-- 按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product GROUP BY brand;

-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product WHERE price > 4000 GROUP BY brand;

-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000;

-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的、并按照总金额的降序排列
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000 ORDER BY getSum DESC;

2、注意事项

  • 可以按多个字段分组,字段之间用逗号隔开
  • having 后可以支持别名
  • 可以支持排序

5.7、多表查询-笛卡尔积查询

1、笛卡尔积查询概述

  • 如果有同时查询两张或两张以上的表,则会将获取这两 / 多 张表的所有组合情况。
  • 要完成多表查询,需要消除这些无效数据的影响

2、笛卡尔积查询语法

  • 标准语法:SELECT列名FROM表名1,表名2......;

5.8、多表查询-内连接

1、查询原理

  • 内连接查询的是两张表有交集那部分数据(有主外键关联的数据)

2、显示内连接

  • 标准语法:SELEECT列名FROM表名1【INNER】JOIN表名2ON条件;

3、隐式内连接

  • 标准语法:SELECT列名FROM表名1,表名2WHERE条件;

5.9、多表查询-左外连接

1、查询原理

  • 查询左表的全部数据,和左右两张表有交集部分的数据。

2、查询语法

  • 标准语法:SELECT列名FROM表名1LEFT【OUTER】JOIN表名2ON条件;

5.10、多表查询-右外连接

1、查询原理

  • 查询右表的全部数据,和左右两张表有交集部分的数据

2、查询语法

  • 标准语法:SELECT列名FROM表名1RIGHT【OUTER】JOIN表名2ON条件;

5.11、多表查询-自连接

1、查询原理

  • 同一张表中有数据关联,可以多次查询这同一个表

2、查询语法

SELECT
	t1.name,	-- 员工姓名
	t1.mgr,		-- 上级编号
	t2.id,		-- 员工编号
	t2.name     -- 员工姓名
FROM
	employee t1  -- 员工表
LEFT OUTER JOIN
	employee t2  -- 员工表
ON
	t1.mgr = t2.id;

5.12、多表查询-全外连接

1、查询原理

  • 查询左右两张表中的所有数据,包括相交和不相交的部分。

2、查询语法

  • 标准语法:SELECT列名FROM表名1FULLOUTERJOIN表名2ON条件;
  • 注意:mysql 不支持全外连接查询,orcal 才会支持。

5.13、多表查询-子查询

1、子查询定义

  • 子查询允许把一个查询嵌套在另一个查询当中。
  • 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。
  • 子查询可以包含普通 select 可以包含的任何子句,如:distinct 、group by、order by 、limit、join 和 union等;但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set、do
  • 子查询的位置:select 中、from 后、 where 后、having 后,放在 group by 和 order by 中无实际意义。

2、子查询分类

标量子查询

  • 返回单一值得标量,最简单形式。可以作为条件,使用运算符进行判断!
  • 基本演示
-- 标准语法
SELECT 列名 FROM 表名 WHERE 列名=(SELECT 聚合函数(列名) FROM 表名 [WHERE 条件]);

-- 查询年龄最高的用户姓名
SELECT MAX(age) FROM USER;              -- 查询出最高年龄
SELECT NAME,age FROM USER WHERE age=26; -- 根据查询出来的最高年龄,查询姓名和年龄
SELECT NAME,age FROM USER WHERE age = (SELECT MAX(age) FROM USER);

列子查询

  • 返回的结果集是 N 行一列,可以作为条件,使用运算符 in 或 not in 进行判断!
  • 基本演示
-- 标准语法
SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (SELECT 列名 FROM 表名 [WHERE 条件]); 
-- 查询张三和李四的订单信息

SELECT id FROM USER WHERE NAME='张三' OR NAME='李四';   -- 查询张三和李四用户的id

SELECT number,uid FROM orderlist WHERE uid=1 OR uid=2; -- 根据id查询订单

SELECT number,uid FROM orderlist WHERE uid IN (SELECT id FROM USER WHERE NAME='张三' OR NAME='李四');

行子查询

  • 返回结果是 单行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集。
  • 基本演示
SELECT * FROM table1 WHERE (1,2) = (SELECT column1,column2 FROM table2)
注:(1,2)等同于 row(1,2)

表子查询

  • 返回结果是 N 行 N 列,可以作为一张虚拟表参与查询!
  • 基本演示
-- 标准语法
SELECT 列名 FROM 表名 [别名],(SELECT 列名 FROM 表名 [WHERE 条件]) [别名] [WHERE 条件];
-- 查询订单表中id大于4的订单信息和所属用户信息

SELECT * FROM USER u,(SELECT * FROM orderlist WHERE id>4) o WHERE u.id=o.uid;

5.14、分页查询

1、分页查询语法

  • 标准语法:SELECT列名ROMLIMIT起始的条目索引,条目数;

2、注意事项

  • 起始条目索引从 0 开始
  • limit 放在查询语句的最后
  • 公式:select * from 表名 limit (page - 1)* sizePage,sizePage;
select  字段|函数|表达式   from    表名  
【where 条件】
【group by 分组字段】 【having 条件】
【order by 排序字段】
【limit 起始目录索引  条目数】

六、数据类型

1、整型

  • TINYINT 1 字节 (-128,127) (0,255) 小整数值
  • SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
  • MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
  • INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
  • BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值

2、浮点型

  • FLOAT 4 字节 (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
  • DOUBLE 8 字节 (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
  • DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

3、字符型

  • CHAR 0-255字节 定长字符串
  • VARCHAR 0-255字节 变长字符串
  • TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
  • TINYTEXT 0-255字节 短文本字符串
  • BLOB 0-65 535字节 二进制形式的长文本数据
  • TEXT 0-65 535字节 长文本数据
  • MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
  • MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
  • LOGNGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
  • LONGTEXT 0-4 294 967 295字节 极大文本数据

4、日期型

  • DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
  • TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
  • YEAR 1 1901/2155 YYYY 年份值
  • DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
  • TIMESTAMP 8 1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

七、约束类型

7.1、约束的概念和分类

  • 约束的概念
  • 对表中的数据进行限定,保证数据的正确性、有效性、完整性!
  • 约束的分类

约束

说明

PRIMARY KEY

主键约束

PRIMARY KEY AUTO_INCREMENT

主键、自动增长

UNIQUE

唯一约束

NOT NULL

非空约束

FOREIGN KEY

外键约束

FOREIGN KEY ON UPDATE CASCADE

外键级联更新

FOREIGN KEY ON DELETE CASCADE

外键级联删除

7.2、主键约束

  • 主键约束特点
  • 主键约束包含:非空和唯一两个功能
  • 一张表只能有一个列作为主键
  • 主键一般用于表中数据的唯一标识
  • 建表时添加主键约束
-- 标准语法
CREATE TABLE 表名(
	列名 数据类型 PRIMARY KEY,
    列名 数据类型,
    ...
);
-- 创建student表

CREATE TABLE student(

id INT PRIMARY KEY  -- 给id添加主键约束

);
-- 添加数据

INSERT INTO student VALUES (1),(2);

-- 主键默认唯一,添加重复数据,会报错

INSERT INTO student VALUES (2);

-- 主键默认非空,不能添加null的数据

INSERT INTO student VALUES (NULL);
-- 查询student表

SELECT * FROM student;

-- 查询student表详细

DESC student;
  • 删除主键
-- 标准语法
ALTER TABLE 表名 DROP PRIMARY KEY;
-- 删除主键

ALTER TABLE student DROP PRIMARY KEY;
  • 建表后单独添加主键
-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;
-- 添加主键

ALTER TABLE student MODIFY id INT PRIMARY KEY;

7.3、主键自动增长约束

  • 建表时添加主键自增约束
-- 标准语法
CREATE TABLE 表名(
	列名 数据类型 PRIMARY KEY AUTO_INCREMENT,
    列名 数据类型,
    ...
);
-- 创建student2表

CREATE TABLE student2(

id INT PRIMARY KEY AUTO_INCREMENT    -- 给id添加主键自增约束

);
-- 添加数据

INSERT INTO student2 VALUES (1),(2);

-- 添加null值,会自动增长

INSERT INTO student2 VALUES (NULL),(NULL);
-- 查询student2表

SELECT * FROM student2;

-- student2表详细

DESC student2;
  • 删除自动增长
-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型;
-- 删除自动增长

ALTER TABLE student2 MODIFY id INT;
  • 建表后单独添加自动增长
-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型 AUTO_INCREMENT;
-- 添加自动增长

ALTER TABLE student2 MODIFY id INT AUTO_INCREMENT;

7.4、唯一约束

  • 建表时添加唯一约束
-- 标准语法
CREATE TABLE 表名(
	列名 数据类型 UNIQUE,
    列名 数据类型,
    ...
);
-- 创建student3表

CREATE TABLE student3(

id INT PRIMARY KEY AUTO_INCREMENT,

tel VARCHAR(20) UNIQUE    -- 给tel列添加唯一约束

);
-- 添加数据

INSERT INTO student3 VALUES (NULL,'18888888888'),(NULL,'18666666666');

-- 添加重复数据,会报错

INSERT INTO student3 VALUES (NULL,'18666666666');
-- 查询student3数据表

SELECT * FROM student3;

-- student3表详细

DESC student3;
  • 删除唯一约束
-- 标准语法
ALTER TABLE 表名 DROP INDEX 列名;
-- 删除唯一约束

ALTER TABLE student3 DROP INDEX tel;
  • 建表后单独添加唯一约束
-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型 UNIQUE;
-- 添加唯一约束

ALTER TABLE student3 MODIFY tel VARCHAR(20) UNIQUE;

7.5、非空约束

  • 建表时添加非空约束
-- 标准语法
CREATE TABLE 表名(
	列名 数据类型 NOT NULL,
    列名 数据类型,
    ...
);
-- 创建student4表

CREATE TABLE student4(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20) NOT NULL    -- 给name添加非空约束

);
-- 添加数据

INSERT INTO student4 VALUES (NULL,'张三'),(NULL,'李四');

-- 添加null值,会报错

INSERT INTO student4 VALUES (NULL,NULL);
  • 删除非空约束
-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型;
-- 删除非空约束

ALTER TABLE student4 MODIFY NAME VARCHAR(20);
  • 建表后单独添加非空约束
-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型 NOT NULL;
-- 添加非空约束

ALTER TABLE student4 MODIFY NAME VARCHAR(20) NOT NULL;
  •