《2022年mysql数据库知识点总结 .pdf》由会员分享,可在线阅读,更多相关《2022年mysql数据库知识点总结 .pdf(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、北京传智播客教育 高级软件人才实作培训专家!MySQL 数据库1数据库概念(了解)1.1什么是数据库数据库就是用来存储和管理 数据的仓库!数据库存储数据的优先:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!可存储大量数据;方便检索;保持数据的一致性、完整性;安全,可共享;通过组合分析,可产生新数据。数据库具有原子性,数据不可再分割!1.2数据库的发展历程没有数据库,使用磁盘文件存储数据;层次结构模型数据库;网状结构模型数据库;关系结构模型数据库:使用二维表格来存储数据;关系-对象模型数据库;MySQL就是关系型数据库!1.
2、3常见数据库Oracle:甲骨文;DB2:IBM;SQL Server:微软;Sybase:赛尔斯;MySQL:甲骨文;1.4理解数据库我们现在所说的数据库泛指关“系型数据库管理系统(RDBMS-Relational database management system)”,即“数据库服务器”。当我们安装了数据库服务器后,就可以在数据库服务器中创建数据库,每个数据库中还可以包含多张表。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!数据库表就是一个多行多列的表格。在创建表时,需要指定表的列数,以及列名称,列类型等信息。而不用
3、指定表格的行数,行数是没有上限的。下面是tab_student 表的结构:当把表格创建好了之后,就可以向表格中添加数据了。向表格添加数据是以行为单位的!下面是 s_student 表的记录:s_id s_name s_age s_sex S_1001 zhangSan 23 male S_1002 liSi 32 female S_1003 wangWu 44 male 大家要学会区分什么是表结构,什么是表记录。1.5应用程序与数据库应用程序使用数据库完成对数据的存储!名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!2安装
4、MySQL 数据库2.1安装 MySQL 参考:MySQL安装图解.doc 2.2MySQL 目录结构MySQL 的数据存储目录为data,data 目录通常在C:Documents and SettingsAll UsersApplication DataMySQLMySQL Server 5.1data 位置。在data 下的每个目录都代表一个数据库。MySQL的安装目录下:bin 目录中都是可执行文件;my.ini 文件是 MySQL的配置文件;3基本命令3.1启动和关闭mysql 服务器启动:net start mysql(后面不加分号);关闭:net stop mysql(后面不加分
5、号);在启动 mysql 服务后,打开windows 任务管理器,会有一个名为mysqld.exe 的进程运行,所以mysqld.exe 才是 MySQL服务器程序。3.2客户端登录退出mysql 在启动MySQL 服务器后,我们需要使用管理员用户登录MySQL 服务器,然后来对服务器进行操作。登录MySQL需要使用MySQL的客户端程序:mysql.exe 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!登录:mysql-u root-p 123-h localhost;-u:后面的root 是用户名,这里使用的是超级管理
6、员root;-p:后面的123 是密码,这是在安装MySQL时就已经指定的密码;-h:后面给出的localhost 是服务器主机名,它是可以省略的,例如:mysql-u root-p 123;退出:quit 或 exit;在登录成功后,打开 windows 任务管理器,会有一个名为mysql.exe 的进程运行,所以 mysql.exe是客户端程序。SQL 语句1SQL概述1.1什么是 SQL SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server等。S
7、Q标准(ANSI/ISO)有:SQL-92:1992 年发布的SQL语言标准;SQL:1999:1999 年发布的SQL语言标签;SQL:2003:2003 年发布的SQL语言标签;这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。虽然 SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言”。例如 MySQL中的 LIMIT 语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle 或 SQL Server都有自己的方言。1.2语法要求SQL语句可以单行或多行书写,以分号结尾;可以用空格和缩进
8、来来增强语句的可读性;关键字不区别大小写,建议使用大写;2分类DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;DQL(Data Query Language):数据查询语言,用来查询记录(数据)。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!3DDL 3.1基本操作
9、查看所有数据库名称:SHOW DATABASES;切换数据库:USE mydb1,切换到mydb1 数据库;3.2操作数据库创建数据库:CREATE DATABASE IF NOT EXISTS mydb1;创建数据库,例如:CREATE DATABASE mydb1,创建一个名为mydb1 的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1,在名为 mydb1 的数据库不存在时创建该库,这样可以避免报错。删除数据库:DROP DATABASE IF EXISTS mydb1;删除数据库,例如:DROP DATABASE my
10、db1,删除名为mydb1 的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算 mydb1 不存在,也不会的报错。修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8 修改数据库mydb1 的编码为utf8。注意,在 MySQL中所有的UTF-8编码都不能使用中间的“-”,即 UTF-8要书写为UTF8。3.3数据(列)类型MySQL与 Java一样,也有数据类型。MySQL中数据类型主要应用在列上。常用类型:int:整型double:浮点型,例如 double(5,2)表示最多 5 位,其中必
11、须有2 位小数,即最大值为999.99;decimal:浮点型,在表示钱方面使用该类型,因为不会出现精度缺失问题;char:固定长度字符串类型;varchar:可变长度字符串类型;text:字符串类型;blob:字节类型;date:日期类型,格式为:yyyy-MM-dd;time:时间类型,格式为:hh:mm:ss timestamp:时间戳类型;3.4操作表创建表:CREATE TABLE 表名(列名列类型,列名列类型,名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!.);例如:CREATE TABLE stu(sid C
12、HAR(6),sname VARCHAR(20),age INT,gender VARCHAR(10);再例如:CREATE TABLE emp(eid CHAR(6),ename VARCHAR(50),age INT,gender VARCHAR(6),birthday DATE,hiredate DATE,salary DECIMAL(7,2),resume VARCHAR(1000);查看当前数据库中所有表名称:SHOW TABLES;查看指定表的创建语句:SHOW CREATE TABLE emp,查看 emp 表的创建语句;查看表结构:DESC emp,查看 emp 表结构;删除表
13、:DROP TABLE emp,删除 emp 表;修改表:1.修改之添加列:给stu 表添加 classname 列:ALTER TABLE stu ADD(classname varchar(100);2.修改之修改列类型:修改stu 表的 gender 列类型为 CHAR(2):ALTER TABLE stu MODIFY gender CHAR(2);3.修改之修改列名:修改stu 表的 gender 列名为 sex:ALTER TABLE stu change gender sex CHAR(2);4.修改之删除列:删除stu 表的 classname 列:ALTER TABLE st
14、u DROP classname;5.修改之修改表名称:修改stu 表名称为student:ALTER TABLE stu RENAME TO student;4DML 4.1插入数据语法:名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!INSERT INTO 表名(列名 1,列名 2,)VALUES(值 1,值 2)INSERT INTO stu(sid,sname,age,gender)VALUES(s_1001,zhangSan,23,male);INSERT INTO stu(sid,sname)VALUES(s_1
15、001,zhangSan);语法:INSERT INTO 表名 VALUES(值 1,值 2,)因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:INSERT INTO stu VALUES(s_1002,liSi,32,female);注意:所有字符串数据必须使用单引用!4.2修改数据语法:UPDATE 表名SET 列名 1=值 1,列名 n=值 n WHERE 条件 UPDATE stu SET sname=zhangSanSan ,age=32,gender=female WHERE sid=s_1001;UPDATE stu SET sname=liSi,age=20 WH
16、ERE age50 AND gender=male;UPDATE stu SET sname=wangWu,age=30 WHERE age60 OR gender=female;UPDATE stu SET gender=female WHERE gender IS NULL UPDATE stu SET age=age+1 WHERE sname=zhaoLiu;4.3删除数据语法:DELETE FROM 表名WHERE 条件 DELETE FROM stu WHERE sid=s_1001 003BDELETE FROM stu WHERE sname=chenQi OR age 30;
17、DELETE FROM stu;语法:TRUNCATE TABLE 表名TRUNCATE TABLE stu;虽然TRUNCATE和 DELETE都可以删除表的所有记录,但有原理不同。DELETE的效率没有TRUNCATE 高!TRUNCATE其实属性DDL语句,因为它是先DROP TABLE,再 CREATE TABLE。而且 TRUNCATE 删除的记录是无法回滚的,但DELETE 删除的记录是可以回滚的(回滚是事务的知识!)。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!5DCL 5.1创建用户语法:CREATE U
18、SER 用户名 地址IDENTIFIED BY 密码;CREATE USER user1localhost IDENTIFIED BY 123;CREATE USER user2%IDENTIFIED BY 123;5.2给用户授权语法:GRANT 权限 1,权限 n ON 数据库.*TO 用户名GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.*TO user1localhost;GRANT ALL ON mydb1.*TO user2localhost;5.3撤销授权语法:REVOKE 权限 1,权限 n ON 数据库
19、.*FORM 用户名REVOKE CREATE,ALTER,DROP ON mydb1.*FROM user1localhost;5.4查看用户权限语法:SHOW GRANTS FOR 用户名SHOW GRANTS FOR user1localhost;5.5删除用户语法:DROP USER 用户名DROP USER user1localhost;5.6修改用户密码语法:USE mysql;UPDATE USER SET PASSWORD=PASSWORD(密码 )WHERE User=用户名 and Host=IP;FLUSH PRIVILEGES;UPDATE USER SET PASSW
20、ORD=PASSWORD(1234)WHERE User=user2 and Host=localhost;FLUSH PRIVILEGES;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!数据查询语法(DQL)DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。语法:SELECT selection_list/*要查询的列名称*/FROM table_list/*要查询的表名称*/WHERE condition/*行条件*/GROUP BY grouping_columns/*对
21、结果分组*/HAVING condition/*分组后的行条件*/ORDER BY sorting_columns/*对结果分组*/LIMIT offset_start,row_count/*结果限定*/创建名:学生表:stu 字段名称字段类型说明sid char(6)学生学号sname varchar(50)学生姓名age int 学生年龄gender varchar(50)学生性别CREATE TABLE stu(sid CHAR(6),sname VARCHAR(50),age INT,gender VARCHAR(50);INSERT INTO stu VALUES(S_1001,li
22、uYi,35,male);INSERT INTO stu VALUES(S_1002,chenEr,15,female);INSERT INTO stu VALUES(S_1003,zhangSan,95,male);INSERT INTO stu VALUES(S_1004,liSi,65,female);INSERT INTO stu VALUES(S_1005,wangWu,55,male);INSERT INTO stu VALUES(S_1006,zhaoLiu,75,female);INSERT INTO stu VALUES(S_1007,sunQi,25,male);INSER
23、T INTO stu VALUES(S_1008,zhouBa,45,female);INSERT INTO stu VALUES(S_1009,wuJiu,85,male);INSERT INTO stu VALUES(S_1010,zhengShi,5,female);INSERT INTO stu VALUES(S_1011,xxx,NULL,NULL);雇员表:emp 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!字段名称字段类型说明empno int 员工编号ename varchar(50)员工姓名job v
24、archar(50)员工工作mgr int 领导编号hiredate date 入职日期sal decimal(7,2)月薪comm decimal(7,2)奖金deptno int 部分编号CREATE TABLE emp(empno INT,ename VARCHAR(50),job VARCHAR(50),mgr INT,hiredate DATE,sal DECIMAL(7,2),comm decimal(7,2),deptno INT);INSERT INTO emp values(7369,SMITH,CLERK,7902,1980-12-17,800,NULL,20);INSER
25、T INTO emp values(7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30);INSERT INTO emp values(7521,WARD,SALESMAN,7698,1981-02-22,1250,500,30);INSERT INTO emp values(7566,JONES,MANAGER,7839,1981-04-02,2975,NULL,20);INSERT INTO emp values(7654,MARTIN,SALESMAN,7698,1981-09-28,1250,1400,30);INSERT INTO emp
26、values(7698,BLAKE,MANAGER,7839,1981-05-01,2850,NULL,30);INSERT INTO emp values(7782,CLARK,MANAGER,7839,1981-06-09,2450,NULL,10);INSERT INTO emp values(7788,SCOTT,ANALYST,7566,1987-04-19,3000,NULL,20);INSERT INTO emp values(7839,KING,PRESIDENT,NULL,1981-11-17,5000,NULL,10);INSERT INTO emp values(7844
27、,TURNER,SALESMAN,7698,1981-09-08,1500,0,30);INSERT INTO emp values(7876,ADAMS,CLERK,7788,1987-05-23,1100,NULL,20);INSERT INTO emp values(7900,JAMES,CLERK,7698,1981-12-03,950,NULL,30);INSERT INTO emp values(7902,FORD,ANALYST,7566,1981-12-03,3000,NULL,20);INSERT INTO emp values(7934,MILLER,CLERK,7782,
28、1982-01-23,1300,NULL,10);部分表:dept 字段名称字段类型说明deptno int 部分编码dname varchar(50)部分名称loc varchar(50)部分所在地点CREATE TABLE dept(名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!deptno INT,dname varchar(14),loc varchar(13);INSERT INTO dept values(10,ACCOUNTING,NEW YORK);INSERT INTO dept values(20,R
29、ESEARCH,DALLAS);INSERT INTO dept values(30,SALES,CHICAGO);INSERT INTO dept values(40,OPERATIONS,BOSTON);1基础查询1.1查询所有列SELECT*FROM stu;1.2查询指定列SELECT sid,sname,age FROM stu;2条件查询2.1条件查询介绍条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:=、!=、=;BETWEEN AND;IN(set);IS NULL;AND;OR;NOT;2.2查询性别为女,并且年龄50 的记录SELECT
30、*FROM stu WHERE gender=female AND ge=20 AND age=40;或者SELECT*FROM stu WHERE age BETWEEN 20 AND 40;2.8查询性别非男的学生记录SELECT*FROM stu WHERE gender!=male;或者SELECT*FROM stu WHERE gendermale;或者SELECT*FROM stu WHERE NOT gender=male;名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!2.9查询姓名不为null 的学生记录
31、SELECT*FROM stu WHERE NOT sname IS NULL;或者SELECT*FROM stu WHERE sname IS NOT NULL;3模糊查询当想查询姓名中包含a 字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。3.1查询姓名由5 个字母构成的学生记录SELECT*FROM stu WHERE sname LIKE _;模糊查询必须使用LIKE关键字。其中“_”匹配任意一个字母,5 个“_”表示 5 个任意字母。3.2查询姓名由5 个字母构成,并且第5 个字母为“i”的学生记录SELECT*FROM stu WHERE sname LIKE _
32、i;3.3查询姓名以“z”开头的学生记录SELECT*FROM stu WHERE sname LIKE z%;其中“%”匹配 0n 个任何字母。3.4查询姓名中第2 个字母为“i”的学生记录SELECT*FROM stu WHERE sname LIKE _i%;3.5查询姓名中包含“a”字母的学生记录SELECT*名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!FROM stu WHERE sname LIKE%a%;4字段控制查询4.1去除重复记录去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如 emp
33、 表中 sal字段就存在相同的记录。当只查询emp 表的 sal 字段时,那么会出现重复记录,那么想去除重复记录,需要使用 DISTINCT:SELECT DISTINCT sal FROM emp;4.2查看雇员的月薪与佣金之和因为 sal 和 comm 两列的类型都是数值类型,所以可以做加运算。如果sal或 comm 中有一个字段不是数值类型,那么会出错。SELECT*,sal+comm FROM emp;comm 列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。下面使用了把NULL转换成数值0 的函数 IFNULL:SELECT*,
34、sal+IFNULL(comm,0)FROM emp;4.3给列名添加别名在上面查询中出现列名为sal+IFNULL(comm,0),这很不美观,现在我们给这一列给出一个别名,为 total:SELECT*,sal+IFNULL(comm,0)AS total FROM emp;给列起别名时,是可以省略AS关键字的:SELECT*,sal+IFNULL(comm,0)total FROM emp;5排序5.1查询所有学生记录,按年龄升序排序SELECT*FROM stu ORDER BY sage ASC;或者SELECT*FROM stu ORDER BY sage;名师资料总结-精品资料欢
35、迎下载-名师精心整理-第 15 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!5.2查询所有学生记录,按年龄降序排序SELECT*FROM stu ORDER BY age DESC;5.3查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序SELECT*FROM emp ORDER BY sal DESC,empno ASC;6聚合函数聚合函数是用来做纵向运算的函数:COUNT():统计指定列不为NULL的记录行数;MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排
36、序运算;SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;6.1COUNT 当需要纵向统计时可以使用COUNT()。查询 emp 表中记录数:SELECT COUNT(*)AS cnt FROM emp;查询 emp 表中有佣金的人数:SELECT COUNT(comm)cnt FROM emp;注意,因为count()函数中给出的是comm 列,那么只统计comm 列非 NULL的行数。查询 emp 表中月薪大于2500 的人数:SELECT COUNT(*)FROM emp WHERE
37、 sal 2500;统计月薪与佣金之和大于2500 元的人数:SELECT COUNT(*)AS cnt FROM emp WHERE sal+IFNULL(comm,0)2500;查询有佣金的人数,以及有领导的人数:SELECT COUNT(comm),COUNT(mgr)FROM emp;名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!6.2SUM 和 AVG 当需要纵向求和时使用sum()函数。查询所有雇员月薪和:SELECT SUM(sal)FROM emp;查询所有雇员月薪和,以及所有雇员佣金和:SELECT S
38、UM(sal),SUM(comm)FROM emp;查询所有雇员月薪+佣金和:SELECT SUM(sal+IFNULL(comm,0)FROM emp;统计所有员工平均工资:SELECT SUM(sal),COUNT(sal)FROM emp;或者SELECT AVG(sal)FROM emp;6.3MAX 和 MIN 查询最高工资和最低工资:SELECT MAX(sal),MIN(sal)FROM emp;7分组查询当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。7.1分组查询查询每个部门的部门编号和每个部门的工资和:SELECT deptn
39、o,SUM(sal)FROM emp GROUP BY deptno;查询每个部门的部门编号以及每个部门的人数:SELECT deptno,COUNT(*)FROM emp GROUP BY deptno;查询每个部门的部门编号以及每个部门工资大于1500 的人数:SELECT deptno,COUNT(*)FROM emp 名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!WHERE sal1500 GROUP BY deptno;7.2HAVING 子句查询工资总和大于9000 的部门编号以及工资和:SELECT dep
40、tno,SUM(sal)FROM emp GROUP BY deptno HAVING SUM(sal)9000;注意,WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。8LIMIT LIMIT 用来限定查询结果的起始行,以及总行数。8.1查询 5 行记录,起始行从0 开始SELECT*FROM emp LIMIT 0,5;注意,起始行从0 开始,即第一行开始!8.2查询 10 行记录,起始行从3 开始SELECT*FROM emp LIMIT 3,10;8.3分页查询如果一页记录为10 条,希望查看第3 页
41、记录应该怎么查呢?第一页记录起始行为0,一共查询10 行;第二页记录起始行为10,一共查询10 行;第三页记录起始行为20,一共查询10 行;完整性约束完整性约束是为了表的数据的正确性!如果数据不正确,那么一开始就不能添加到表中。名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!1主键当某一列添加了主键约束后,那么这一列的数据就不能重复出现。这样每行记录中其主键列的值就是这一行的唯一标识。例如学生的学号可以用来做唯一标识,而学生的姓名是不能做唯一标识的,因为学习有可能同名。主键列的值不能为NULL,也不能重复!指定主键约束使
42、用PRIMARY KEY 关键字(primary key);创建表:定义列时指定主键:CREATE TABLE stu(sid CHAR(6)PRIMARY KEY,sname VARCHAR(20),age INT,gender VARCHAR(10);创建表:定义列之后独立指定主键:CREATE TABLE stu(sid CHAR(6),sname VARCHAR(20),age INT,gender VARCHAR(10),PRIMARY KEY(sid);修改表时指定主键:ALTER TABLE stu ADD PRIMARY KEY(sid);删除主键(只是删除主键约束,而不会删除
43、主键列):ALTER TABLE stu DROP PRIMARY KEY;2主键自增长MySQL 提供了主键自动增长的功能!这样用户就不用再为是否有主键是否重复而烦恼了。当主键设置为自动增长后,在没有给出主键值时,主键的值会自动生成,而且是最大主键值+1,也就不会出现重复主键的可能了。创建表时设置主键自增长(主键必须是整型才可以自增长):CREATE TABLE stu(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(20),age INT,gender VARCHAR(10)名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 3
44、3 页 -北京传智播客教育 高级软件人才实作培训专家!);修改表时设置主键自增长:ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;修改表时删除主键自增长:ALTER TABLE stu CHANGE sid sid INT;3非空指定非空约束的列不能没有值,也就是说在插入记录时,对添加了非空约束的列一定要给值;在修改记录时,不能把非空列的值设置为NULL。(int primary key auto_incement);指定非空约束:CREATE TABLE stu(sid INT PRIMARY KEY AUTO_INCREMENT,snam
45、e VARCHAR(10)NOT NULL,age INT,gender VARCHAR(10);当为 sname 字段指定为非空后,在向stu 表中插入记录时,必须给sname 字段指定值,否则会报错:INSERT INTO stu(sid)VALUES(1);插入的记录中sname 没有指定值,所以会报错!4唯一还可以为字段指定唯一约束!当为字段指定唯一约束后,那么字段的值必须是唯一的。这一点与主键相似!例如给stu 表的 sname 字段指定唯一约束:CREATE TABLE tab_ab(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(
46、10)UNIQUE);INSERT INTO sname(sid,sname)VALUES(1001,zs);INSERT INTO sname(sid,sname)VALUES(1002,zs);当两次插入相同的名字时,MySQL会报错!5外键主外键是构成表与表关联的唯一途径!外键是另一张表的主键!例如员工表与部门表之间就存在关联关系,其中员工表中的部门编号名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!字段就是外键,是相对部门表的外键。我们再来看BBS系统中:用户表(t_user)、分类表(t_section)、帖子表
47、(t_topic)三者之间的关系。例如在 t_section 表中 sid 为 1 的记录说明有一个分类叫java,版主是 t_user 表中 uid 为 1 的用户,即 zs!例如在 t_topic 表中 tid 为 2 的记录是名字为“Java是咖啡”的帖子,它是java 版块的帖子,它的作者是ww。外键就是用来约束这一列的值必须是另一张表的主键值!创建t_user 表,指定uid 为主键列:(unique-独一无二的not null)(primary-主要的key auto_increment)CREATE TABLE t_user(uid INT PRIMARY KEY AUTO_IN
48、CREMENT,uname VARCHAR(20)UNIQUE NOT NULL);创建 t_section 表,指定sid 为主键列,u_id 为相对 t_user 表的 uid 列的外键:CREATE TABLE t_section(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(30),u_id INT,Constraint fk_t_user foreign key(u_id)referen ces t_user(uid)CONSTRAINT fk_t_user FOREIGN KEY(u_id)REFERENCES t_user(ui
49、d);修改 t_section 表,指定u_id 为相对 t_user 表的 uid 列的外键:名师资料总结-精品资料欢迎下载-名师精心整理-第 21 页,共 33 页 -北京传智播客教育 高级软件人才实作培训专家!ALTER TABLE t_section ADD CONSTRAINT fk_t_user FOREIGN KEY(u_id)REFERENCES t_user(uid);修改 t_section 表,删除u_id 的外键约束:ALTER TABLE t_section DROP FOREIGN KEY fk_t_user;6表与表之间的关系一对一:例如t_person 表和 t
50、_card 表,即人和身份证。这种情况需要找出主从关系,即谁是主表,谁是从表。人可以没有身份证,但身份证必须要有人才行,所以人是主表,而身份证是从表。设计从表可以有两种方案:在 t_card 表中添加外键列(相对t_user 表),并且给外键添加唯一约束;给 t_card 表的主键添加外键约束(相对t_user 表),即 t_card 表的主键也是外键。一对多(多对一):最为常见的就是一对多!一对多和多对一,这是从哪个角度去看得出来的。t_user 和 t_section 的关系,从t_user 来看就是一对多,而从t_section 的角度来看就是多对一!这种情况都是在多方创建外键!多对多: