收藏 分享(赏)

mysql数据库知识点总结.doc

上传人:精品资料 文档编号:8961751 上传时间:2019-07-18 格式:DOC 页数:33 大小:558.40KB
下载 相关 举报
mysql数据库知识点总结.doc_第1页
第1页 / 共33页
mysql数据库知识点总结.doc_第2页
第2页 / 共33页
mysql数据库知识点总结.doc_第3页
第3页 / 共33页
mysql数据库知识点总结.doc_第4页
第4页 / 共33页
mysql数据库知识点总结.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、北京传智播客教育 高级软件人才实作培训专家!MySQL数据库1 数据库概念(了解)1.1 什么是数据库数据库就是用来存储和管理数据的仓库!数据库存储数据的优先:北京传智播客教育 高级软件人才实作培训专家! 可存储大量数据; 方便检索; 保持数据的一致性、完整性; 安全,可共享; 通过组合分析,可产生新数据。数据库具有原子性,数据不可再分割!1.2 数据库的发展历程 没有数据库,使用磁盘文件存储数据; 层次结构模型数据库; 网状结构模型数据库; 关系结构模型数据库:使用二维表格来存储数据; 关系-对象模型数据库;MySQL 就是关系型数据库!1.3 常见数据库 Oracle:甲骨文; DB2:I

2、BM ; SQL Server:微软; Sybase:赛尔斯; MySQL:甲骨文;1.4 理解数据库我们现在所说的数据库泛指关“系型数据库管理系统(RDBMS - Relational database management system) ”,即“ 数据库服务器” 。当我们安装了数据库服务器后,就可以在数据库服务器中创建数据库,每个数据库中还可以包含多张表。北京传智播客教育 高级软件人才实作培训专家!数据库表就是一个多行多列的表格。在创建表时,需要指定表的列数,以及列名称,列类型等信息。而不用指定表格的行数,行数是没有上限的。下面是 tab_student 表的结构:当把表格创建好了之后,

3、就可以向表格中添加数据了。向表格添加数据是以行为单位的!下面是 s_student 表的记录:s_id s_name s_age s_sexS_1001 zhangSan 23 maleS_1002 liSi 32 femaleS_1003 wangWu 44 male大家要学会区分什么是表结构,什么是表记录。1.5 应用程序与数据库应用程序使用数据库完成对数据的存储!北京传智播客教育 高级软件人才实作培训专家!2 安装 MySQL 数据库2.1 安装 MySQL参考:MySQL 安装图解.doc2.2 MySQL 目录结构MySQL 的数据存储目录为 data,data 目录通常在 C:Do

4、cuments and SettingsAll UsersApplication DataMySQLMySQL Server 5.1data 位置。在 data 下的每个目录都代表一个数据库。MySQL 的安装目录下: bin 目录中都是可执行文件; my.ini 文件是 MySQL 的配置文件;3 基本命令3.1 启动和关闭 mysql 服务器 启动:net start mysql(后面不加分号); 关闭:net stop mysql(后面不加分号 );在启动 mysql 服务后,打开 windows 任务管理器,会有一个名为 mysqld.exe 的进程运行,所以mysqld.exe 才是

5、 MySQL 服务器程序。3.2 客户端登录退出 mysql在启动 MySQL 服务器后,我们需要使用管理员用户登录 MySQL 服务器,然后来对服务器进行北京传智播客教育 高级软件人才实作培训专家!操作。登录 MySQL 需要使用 MySQL 的客户端程序:mysql.exe 登录:mysql -u root -p 123 -h localhost; -u:后面的 root 是用户名,这里使用的是超级管理员 root; -p:后面的 123 是密码,这是在安装 MySQL 时就已经指定的密码; -h:后面给出的 localhost 是服务器主机名,它是可以省略的,例如:mysql -u ro

6、ot -p 123; 退出:quit 或 exit;在登录成功后,打开 windows 任务管理器,会有一个名为 mysql.exe 的进程运行,所以mysql.exe 是客户端程序。SQL 语句1 SQL 概述1.1 什么是 SQLSQL(Structured Query Language)是“结构化查询语言” ,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server 等。SQ 标准(ANSI/ISO)有: SQL-92:1992 年发布的 SQL 语言标准; SQL:1999:1999 年发布的 SQL 语言标签; SQL:200

7、3:2003 年发布的 SQL 语言标签;这些标准就与 JDK 的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。虽然 SQL 可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言” 。例如 MySQL 中的 LIMIT 语句就是 MySQL 独有的方言,其它数据库都不支持!当然,Oracle 或 SQL Server 都有自己的方言。1.2 语法要求 SQL 语句可以单行或多行书写,以分号结尾; 可以用空格和缩进来来增强语句的可读性; 关键字不区别大小写,建议使用大写;2 分类 DDL(Data Definition Lang

8、uage):数据定义语言,用来定义数据库对象:库、表、列等; DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据) ;北京传智播客教育 高级软件人才实作培训专家! DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别; DQL(Data Query Language):数据查询语言,用来查询记录(数据) 。3 DDL3.1 基本操作 查看所有数据库名称:SHOW DATABASES; 切换数据库:USE mydb1,切换到 mydb1 数据库;3.2 操作数据库 创建数据库:CREATE DATABA

9、SE IF NOT EXISTS mydb1;创建数据库,例如:CREATE DATABASE mydb1,创建一个名为 mydb1 的数据库。如果这个数据已经存在,那么会报错。例如 CREATE DATABASE IF NOT EXISTS mydb1,在名为 mydb1 的数据库不存在时创建该库,这样可以避免报错。 删除数据库:DROP DATABASE IF EXISTS mydb1;删除数据库,例如:DROP DATABASE mydb1,删除名为 mydb1 的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算 mydb1 不存

10、在,也不会的报错。 修改数据库编码: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 位,其中必须有 2 位小数,即最大值为999.99; decimal:浮点型,在表示钱方面使用该类型,因为不会出现精度缺失问题; char

11、:固定长度字符串类型; varchar:可变长度字符串类型; text:字符串类型; blob:字节类型; date:日期类型,格式为:yyyy-MM-dd; time:时间类型,格式为:hh:mm:ss timestamp:时间戳类型;北京传智播客教育 高级软件人才实作培训专家!3.4 操作表 创建表:CREATE TABLE 表名(列名 列类型,列名 列类型,);例如:CREATE TABLE stu(sid CHAR(6),sname VARCHAR(20),age INT,gender VARCHAR(10) );再例如:CREATE TABLE emp(eid CHAR(6),ena

12、me 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 表结构; 删除表:DROP TABLE emp,删除 emp 表; 修改表:1. 修改之添加列:给 stu 表添加 classname 列:ALTER TABLE stu ADD (c

13、lassname 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 stu DROP classname;5. 修改之修改表名称:修改 stu 表名称为 student:ALTER TABLE stu RENAME TO

14、 student;Comment 崔1: 因为没有插入 age和gender列的数据,所以该条记录的age和 gender值上为 NULLComment 崔2: 删除表所有记录Comment 崔3: 删除 stu表,再创建stu表。等同与删除 stu表所有记录。北京传智播客教育 高级软件人才实作培训专家!4 DML4.1 插入数据语法:INSERT INTO 表名(列名 1,列名 2, ) VALUES(值 1, 值 2)INSERT INTO stu(sid, sname,age,gender) VALUES(s_1001, zhangSan, 23, male);INSERT INTO s

15、tu(sid, sname) VALUES(s_1001, 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;UPD

16、ATE stu SET sname=liSi, age=20 WHERE age50 AND gender=male;UPDATE stu SET sname=wangWu, age=30 WHERE age60 OR gender=female;UPDATE stu SET gender=female WHERE gender IS NULLUPDATE stu SET age=age+1 WHERE sname=zhaoLiu;4.3 删除数据语法:DELETE FROM 表名 WHERE 条件DELETE FROM stu WHERE sid=s_1001003BDELETE FROM

17、stu WHERE sname=chenQi OR age 30;DELETE FROM stu;语法:TRUNCATE TABLE 表名TRUNCATE TABLE stu;虽然 TRUNCATE和 DELETE都可以删除表的所有记录,但有原理不同。DELETE 的效率没有TRUNCATE高!TRUNCATE其实属性 DDL语句,因为它是先 DROP TABLE,再 CREATE TABLE。而且 TRUNCATE删除的记录是无法回滚的,但 DELETE删除的记录是可以回滚的(回滚是事务的知识!) 。Comment 崔4: user1用户只能在localhost这个 IP登录 mysql服务

18、器Comment 崔5: user2用户可以在任何电脑上登录 mysql服务器北京传智播客教育 高级软件人才实作培训专家!5 DCL5.1 创建用户语法:CREATE USER 用户名地址 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

19、.* TO user1localhost;GRANT ALL ON mydb1.* TO user2localhost;5.3 撤销授权语法:REVOKE 权限 1, , 权限 n ON 数据库.* 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;U

20、PDATE USER SET PASSWORD=PASSWORD(密码) WHERE User=用户名 and Host=IP;FLUSH PRIVILEGES;UPDATE USER SET PASSWORD=PASSWORD(1234) WHERE User=user2 and Host=localhost;FLUSH PRIVILEGES;北京传智播客教育 高级软件人才实作培训专家!数据查询语法(DQL)DQL 就是数据查询语言,数据库执行 DQL 语句不会对数据进行改变,而是让数据库发送结果集给客户端。语法:SELECT selection_list /*要查询的列名称 */FROM

21、table_list /*要查询的表名称*/WHERE condition /*行条件*/GROUP BY grouping_columns /*对结果分组*/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 C

22、HAR(6),sname VARCHAR(50),age INT,gender VARCHAR(50);INSERT INTO stu VALUES(S_1001, liuYi, 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);

23、INSERT INTO stu VALUES(S_1006, zhaoLiu, 75, female);INSERT INTO stu VALUES(S_1007, sunQi, 25, male);INSERT 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);

24、雇员表:emp北京传智播客教育 高级软件人才实作培训专家!字段名称 字段类型 说明empno int 员工编号ename varchar(50) 员工姓名job varchar(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),d

25、eptno INT) ;INSERT INTO emp values(7369,SMITH,CLERK,7902,1980-12-17,800,NULL,20);INSERT 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);INSE

26、RT INTO emp values(7654,MARTIN,SALESMAN,7698,1981-09-28,1250,1400,30);INSERT INTO emp 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 em

27、p values(7839,KING,PRESIDENT,NULL,1981-11-17,5000,NULL,10);INSERT INTO emp values(7844,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,FOR

28、D,ANALYST,7566,1981-12-03,3000,NULL,20);INSERT INTO emp values(7934,MILLER,CLERK,7782,1982-01-23,1300,NULL,10); 部分表:dept字段名称 字段类型 说明deptno int 部分编码dname varchar(50) 部分名称loc varchar(50) 部分所在地点CREATE TABLE dept(北京传智播客教育 高级软件人才实作培训专家!deptno INT,dname varchar(14),loc varchar(13);INSERT INTO dept values(

29、10, ACCOUNTING, NEW YORK);INSERT INTO dept values(20, RESEARCH, 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 子句中可以使用如下运算符及关键字

30、: =、!=、=; BETWEENAND; IN(set); IS NULL; AND; OR; NOT;2.2 查询性别为女,并且年龄 50 的记录SELECT * FROM stu WHERE gender=female AND ge=20 AND agemale;或者SELECT * FROM stuWHERE NOT gender=male;北京传智播客教育 高级软件人才实作培训专家!2.9 查询姓名不为 null 的学生记录SELECT * FROM stuWHERE NOT sname IS NULL;或者SELECT * FROM stuWHERE sname IS NOT NU

31、LL;3 模糊查询当想查询姓名中包含 a 字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字 LIKE。3.1 查询姓名由 5 个字母构成的学生记录SELECT * FROM stuWHERE sname LIKE _;模糊查询必须使用 LIKE 关键字。其中 “_”匹配任意一个字母,5 个“_”表示 5 个任意字母。3.2 查询姓名由 5 个字母构成,并且第 5 个字母为“i”的学生记录SELECT * FROM stuWHERE sname LIKE _i;3.3 查询姓名以“z”开头的学生记录SELECT * FROM stuWHERE sname LIKE z%;其中“%”匹配

32、0n 个任何字母。3.4 查询姓名中第 2 个字母为“i ”的学生记录SELECT * FROM stuWHERE sname LIKE _i%;北京传智播客教育 高级软件人才实作培训专家!3.5 查询姓名中包含“a”字母的学生记录SELECT * FROM stuWHERE sname LIKE %a%;4 字段控制查询4.1 去除重复记录去除重复记录(两行或两行以上记录中系列的上的数据都相同) ,例如 emp 表中 sal 字段就存在相同的记录。当只查询 emp 表的 sal 字段时,那么会出现重复记录,那么想去除重复记录,需要使用 DISTINCT:SELECT DISTINCT sal

33、 FROM emp;4.2 查看雇员的月薪与佣金之和因为 sal 和 comm 两列的类型都是数值类型,所以可以做加运算。如果 sal 或 comm 中有一个字段不是数值类型,那么会出错。SELECT *,sal+comm FROM emp;comm 列有很多记录的值为 NULL,因为任何东西与 NULL 相加结果还是 NULL,所以结算结果可能会出现 NULL。下面使用了把 NULL 转换成数值 0 的函数 IFNULL:SELECT *,sal+IFNULL(comm,0) FROM emp;4.3 给列名添加别名在上面查询中出现列名为 sal+IFNULL(comm,0),这很不美观,现

34、在我们给这一列给出一个别名,为 total:SELECT *, sal+IFNULL(comm,0) AS total FROM emp;给列起别名时,是可以省略 AS 关键字的:SELECT *,sal+IFNULL(comm,0) total FROM emp;5 排序5.1 查询所有学生记录,按年龄升序排序SELECT *FROM stuORDER BY sage ASC;或者SELECT *北京传智播客教育 高级软件人才实作培训专家!FROM stuORDER BY sage;5.2 查询所有学生记录,按年龄降序排序SELECT *FROM stuORDER BY age DESC;5

35、.3 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序SELECT * FROM empORDER BY sal DESC,empno ASC;6 聚合函数聚合函数是用来做纵向运算的函数: COUNT():统计指定列不为 NULL 的记录行数; MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算; MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算; SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0; AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0;6.1 COUN

36、T当需要纵向统计时可以使用 COUNT()。 查询 emp 表中记录数:SELECT COUNT(*) AS cnt FROM emp; 查询 emp 表中有佣金的人数:SELECT COUNT(comm) cnt FROM emp;注意,因为 count()函数中给出的是 comm 列,那么只统计 comm 列非 NULL 的行数。 查询 emp 表中月薪大于 2500 的人数:SELECT COUNT(*) FROM empWHERE sal 2500; 统计月薪与佣金之和大于 2500 元的人数:SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNU

37、LL(comm,0) 2500; 查询有佣金的人数,以及有领导的人数:SELECT COUNT(comm), COUNT(mgr) FROM emp;北京传智播客教育 高级软件人才实作培训专家!6.2 SUM 和 AVG当需要纵向求和时使用 sum()函数。 查询所有雇员月薪和:SELECT SUM(sal) FROM emp; 查询所有雇员月薪和,以及所有雇员佣金和:SELECT SUM(sal), SUM(comm) FROM emp; 查询所有雇员月薪+ 佣金和:SELECT SUM(sal+IFNULL(comm,0) FROM emp; 统计所有员工平均工资:SELECT SUM(s

38、al), COUNT(sal) FROM emp;或者SELECT AVG(sal) FROM emp;6.3 MAX 和 MIN 查询最高工资和最低工资:SELECT MAX(sal), MIN(sal) FROM emp;7 分组查询当需要分组查询时需要使用 GROUP BY 子句,例如查询每个部门的工资和,这说明要使用部分来分组。7.1 分组查询 查询每个部门的部门编号和每个部门的工资和:SELECT deptno, SUM(sal)FROM empGROUP BY deptno; 查询每个部门的部门编号以及每个部门的人数:SELECT deptno,COUNT(*)FROM empGR

39、OUP BY deptno; 查询每个部门的部门编号以及每个部门工资大于 1500 的人数:北京传智播客教育 高级软件人才实作培训专家!SELECT deptno,COUNT(*)FROM empWHERE sal1500GROUP BY deptno;7.2 HAVING 子句 查询工资总和大于 9000 的部门编号以及工资和:SELECT deptno, SUM(sal)FROM empGROUP BY deptnoHAVING SUM(sal) 9000;注意,WHERE 是对分组前记录的条件,如果某行记录没有满足 WHERE 子句的条件,那么这行记录不会参加分组;而 HAVING 是对

40、分组后数据的约束。8 LIMITLIMIT 用来限定查询结果的起始行,以及总行数。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 页记录应该怎么查呢? 第一页记录起始行为 0,一共查询 10 行; 第二页记录起始行为 10,一共查询 10 行; 第三页记录起始行为 20,一共查询 10 行;完整性约束完整性约束是为了表的数据的正确性!如果数

41、据不正确,那么一开始就不能添加到表中。北京传智播客教育 高级软件人才实作培训专家!1 主键当某一列添加了主键约束后,那么这一列的数据就不能重复出现。这样每行记录中其主键列的值就是这一行的唯一标识。例如学生的学号可以用来做唯一标识,而学生的姓名是不能做唯一标识的,因为学习有可能同名。主键列的值不能为 NULL,也不能重复!指定主键约束使用 PRIMARY KEY 关键字 (primary key); 创建表:定义列时指定主键:CREATE TABLE stu(sid CHAR(6) PRIMARY KEY,sname VARCHAR(20),age INT,gender VARCHAR(10)

42、); 创建表:定义列之后独立指定主键:CREATE TABLE stu(sid CHAR(6),sname VARCHAR(20),age INT,gender VARCHAR(10),PRIMARY KEY(sid); 修改表时指定主键:ALTER TABLE stuADD PRIMARY KEY(sid); 删除主键(只是删除主键约束,而不会删除主键列):ALTER TABLE stu DROP PRIMARY KEY;2 主键自增长MySQL 提供了主键自动增长的功能!这样用户就不用再为是否有主键是否重复而烦恼了。当主键设置为自动增长后,在没有给出主键值时,主键的值会自动生成,而且是最大

43、主键值+1,也就不会出现重复主键的可能了。 创建表时设置主键自增长(主键必须是整型才可以自增长):CREATE TABLE stu(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(20),age INT,北京传智播客教育 高级软件人才实作培训专家!gender VARCHAR(10); 修改表时设置主键自增长:ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT; 修改表时删除主键自增长:ALTER TABLE stu CHANGE sid sid INT;3 非空指定非空约束的列不能没有值,也就是

44、说在插入记录时,对添加了非空约束的列一定要给值;在修改记录时,不能把非空列的值设置为 NULL。(int primary key auto_incement); 指定非空约束:CREATE TABLE stu(sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(10) NOT NULL,age INT,gender VARCHAR(10);当为 sname 字段指定为非空后,在向 stu 表中插入记录时,必须给 sname 字段指定值,否则会报错:INSERT INTO stu(sid) VALUES(1);插入的记录中 sname 没有指定值,

45、所以会报错!4 唯一还可以为字段指定唯一约束!当为字段指定唯一约束后,那么字段的值必须是唯一的。这一点与主键相似!例如给 stu 表的 sname 字段指定唯一约束:CREATE TABLE tab_ab(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(10) UNIQUE);INSERT INTO sname(sid, sname) VALUES(1001, zs);INSERT INTO sname(sid, sname) VALUES(1002, zs);当两次插入相同的名字时,MySQL 会报错!5 外键主外键是构成表与表关联的唯一途径

46、!北京传智播客教育 高级软件人才实作培训专家!外键是另一张表的主键!例如员工表与部门表之间就存在关联关系,其中员工表中的部门编号字段就是外键,是相对部门表的外键。我们再来看 BBS 系统中:用户表( t_user) 、分类表(t_section) 、帖子表(t_topic)三者之间的关系。例如在 t_section 表中 sid 为 1 的记录说明有一个分类叫 java,版主是 t_user 表中 uid 为 1 的用户,即 zs!例如在 t_topic 表中 tid 为 2 的记录是名字为“Java 是咖啡”的帖子,它是 java 版块的帖子,它的作者是 ww。外键就是用来约束这一列的值必须

47、是另一张表的主键值! 创建 t_user 表,指定 uid 为主键列:(unique-独一无二的 not null) (primary-主要的 key auto_increment)CREATE TABLE t_user(uid INT PRIMARY KEY AUTO_INCREMENT,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(uid);北京传智播客教育 高级软件人才实作培训专家! 修

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报