与MySQL的零距离接触.docx_第1页
与MySQL的零距离接触.docx_第2页
与MySQL的零距离接触.docx_第3页
与MySQL的零距离接触.docx_第4页
与MySQL的零距离接触.docx_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

与MySQL的零距离接触笔记 目录:(按住Ctrl并单击可访问链接)第一部份:MySQL基础MySQL概述 MySQL的安装与配置 MySQL目录结构 修改编码方式 启动/停止MySQL服务登陆/退出MySQL 修改MySQL提示符 MySQL常用命令 语法规范 操作数据库第二部份:数据类型整型 浮点型 日期时间型 字符型第三部份:数据表操作打开数据库 创建数据表 查看数据表 记录的插入与查找 空值与非空 自动编号及主键约束唯一约束 默认约束第四部份:外键约束外键约束的要求解析 编程数据表的默认存储引擎 实例 外键约束的参照操作第五部份:修改数据表删除约束 添加约束 删除单/多列 添加单/多列 修改列定义和更名数据表第六部份:数据表的记录操作插入记录 单表记录更新UPDATE 单表删除DELETE 第七部份:查询表达式select直接调用函数 查询表达式select_expr 条件查询WHERE 查询结果分组GROUP BY 分组条件HAVING order by对结果排序 限制查询结果返回的数量LIMIT第八部份:子查询导入数据 子查询基本概念 由比较运算符引发的子查询 由NOT IN/EXISTS引发的子查询使用INSERT.SELECT插入记录时使用子查询 多表更新一步到位第九部份:连接JOIN连接的语法结构 三种连接的演示 关于连接的几点说明 自身连接 单表删除多张表的操作第十部份:内置函数库字符函数 数值运算符和函数 比较运算符和函数 日期时间函数 信息函数 聚合函数 加密函数第十一部份:自定义函数自定义函数简介 创建不带参数的自定义函数 创建带有参数 创建具有复合结构函数体的第十二部份:MySQL存储过程存储过程的简介 创建不带参数的存储过程 创建带有IN类型参数的存储过程 创建带有IN和OUT类型参数的存储过程 创建带有多个OUT类型参数的存储过程 存储过程与自定义函数的区别第十三部份:MySQL存储引擎存储引擎的简介及相关知识点 各种存储引擎的特点 设置存储引擎第十四部份:MySQL图形化管理工具phpMyAdmin MySQL Workbench Navicat for MySQL-课程来自幕课网开然2014.12.28 MySQL基础l MySQL概述:MySQL由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一个开源的关系型数据库管理系统(是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据)。MySQL分为社区版和企业版。MySQL默认的端口号:3306MySQL中的超级用户名:rootl MySQL的安装与配置:安装方式:MIS安装(windows Installer)、ZIP安装两种方式。配置MySQL:1、 运行MySQL配置向导文件:MIS方式安装的需配置。2、 启动MySQL服务:开始管理工具服务(本地)找到MySQL设置为自动,然后在计算机属性高级系统设置高级环境变量在系统变量找到path编辑,确定变量值后面已经启动了MySQL服务。l MySQL目录结构:/bin:存储可执行文件/data:存储数据文件/docs:文档/include:存储包含的头文件/lib:存储库文件/share:错误消息和字符集文件l 修改编码方式:打开my.ini在mysql下添加或修改default-character-set=utf8,在mysqld下添加或修改character-set-server=utf8。l 启动/停止MySQL服务:方式一:服务(本地)里设置MySQL为启动/停止状态;方式二:命令行输入:启动:net start mysql 停止:net stop mysqll 登陆/退出MySQL:cdm运行后输入mysql -uroot -p 回车,提示输入密码,输入密码回车就可以了,如果刚装好的mysql,超级用户root使没有密码的,所以直接回车就可以进入mysql中了。出现提示符:mysql 则表示已经进入MySQL。在登陆MySQL后,输入以下三个命令均可以退出MySQL(含分号):exit; quit; q; 。l 修改MySQL提示符:方式一:通过参数指定:cdm运行登陆后输入命令:mysql uroot proot - -prompt h 回车,提示符改为localhost,h参数是服务器名称,指向localhost。方式二: 通过prompt命令修改:同上,输入命令:prompt mysql 回车,即可修改提示符为mysql。对于提示符的参数,如右侧所示:输入如下命令:prompt uh d 回车后提示符变为:rootlocalhost (none) l MySQL常用命令:1、 打印当前服务器版本:select version();2、 打印当前日期时间:select now();3、 打印当前用户:select user();l 语法规范:1、 关键字与函数名称全部大写;2、 数据库名称、表名称、字段名称全部小写;3、 SQL语句必须以分号结尾。l 操作数据库1、 列出服务器的数据库:mysqlSHOW DATABASES; 2、 创建一个数据库名为abccs:mysql CREATE DATABASE abccs;列出创建的数据库,查看其字符集:(如下图字符集为latin1)修改数据库,并设置字符集为utf8:3、 选择所创建的数据库:mysql USE abccs 回车出现Database changed,表示已经进入。4、 删除一个数据库:mysql DROP DATABASE abccs。 数据类型:指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。数据类型有整型、浮点型、日期时间型、字符串。l 整型:计算机以二进制形式存储,符号位以0和1开头,1为有符号位。l 浮点型:float单精度,double双精度l 日期时间型:l 字符型: 数据表操作:是数据库最重要的组成部份之一,是其它对象的基础。l 打开数据库:如下左图mysql USE abc; SELECT DATABASE(); 显示当前打开的数据库l 创建数据表:如上右图mysql CREATE TABLE tb2( - username VARCHAR(20), - age TINYINT UNSIGNED, unsigned:无符号 - salary FLOAT(8,2) UNSIGNED - );l 查看数据表:mysql SHOW TABLES; 查看数据表mysql SHOW COLUMNS FROM tb1; 查看数据表结构,如右图l 记录的插入与查找:向数据表中写入记录(全部/部份):mysqlINSERT tb1 VALUES(Tom,25,6456.55);mysql INSERT tb1(username,salary) VALUES(John,8000.00);查找全部的字符记录:mysql SELECT *FROM tb1; l 空值与非空:NULL,字段可以为空;NOT NULL,字段值禁止为空,如下例,在username输入时Null时会提示出错:mysql CREATE TABLE tb3( - username VARCHAR(20) NOT NULL, - age TINYINT UNSIGNED NULL - );mysql INSERT tb3 VALUES(Tony,null);mysql INSERT tb3 VALUES(NULL,26);ERROR 1048 (23000): Column username cannot be nulll 自动编号及主键约束:AURO_INCREMENT自动编号,且必须与主键组合使用,默认情况下,起始值为1,每次增量为1。PRIMARY KEY主键约束,每张数据表只能存在一个主键,主键保户记录的唯一性,自动为NOT NULL,但主键不一定须与AURO_INCREMENT组合使用。mysql CREATE TABLE tb4( - id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 将id定义为主键,并自动编号 - username VARCHAR(30) NOT NULL - ); mysql INSERT tb4(username) VALUES(Tom);mysql INSERT tb4(username) VALUES(John); mysql INSERT tb4(username) VALUES(Rose);右图所示,实现自动编号。下面例子没有使用AURO_INCREMENT,当两个id号相同时,会报错:mysql CREATE TABLE tb5( - id SMALLINT KEY, PRIMARY可以省略 - username VARCHAR(30) NOT NULL - );mysql INSERT tb5(username) VALUES(Tom);mysql INSERT tb5 VALUES(4,John);mysql INSERT tb5 VALUES(22,Rose);mysql INSERT tb5 VALUES(22,Hany);ERROR 1062 (23000): Duplicate entry 22 for key PRIMARY id号重叠,报错l 唯一约束:UNIQUE KEY唯一约束,可以保证记录的唯一性,其字符段可以为空值NULL,每张数据表可以存在多个唯一约束。对比PRIMARY KEY只有一个约束,UNIQUE KEY可以有多个。mysql CREATE TABLE tb6( - id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, - username VARCHAR(20) NOT NULL UNIQUE KEY, - age TINYINT UNSIGNED); mysql INSERT tb6(username,age) VALUES(Tom,22);Query OK, 1 row affected (0.09 sec)mysql INSERT tb6(username,age) VALUES(Tom,22);ERROR 1062 (23000): Duplicate entry Tom for key username 提示错误mysql insert tb6(username,age) values(Hany,22);Query OK, 1 row affected (0.09 sec)mysql insert tb6(username,age) values(baby,12);Query OK, 1 row affected (0.17 sec) l 默认约束:DEFAULT当插入记录时没有明确为字段赋值,则自动赋予默认值。mysql create table tb7( - id smallint unsigned auto_increment primary key, - user varchar(20) not null unique key, - sex enum(1,2,3) default 3); mysql insert tb7(user) values(Tom); 由上图可见,只输入一个user值为Tom时,系统默认其set为3。 外键约束:约束保证数据的完整性和一致性,针对字段的数量把约束分为表级约束(针对一个字段时)和列级约束(两个或两个以上的字段)。约束类型包含以下5种:NOT NULL非空约束、PRIMARY KRY主键约束,UNIQUE KEY唯一约束、DEFAULT默认约束、FOREIGN KEY外键约束。对一个数据列建立的约束,称为列级约束;对多个数据列建立的约束,称为表级约束。列级约束既可以在列定义时声明,也可以在列定义后声明。表级约束只能在列定义后声明。实际项目列级约束使用较多。l 外键约束的要求解析外键约束,保持数据一致性、完整性,实现一对一或一对多关系。外键约束的要求:1、 父表(子表所参照的表)和子表(具有外键列的表)必须使用相同的存储引擎,而且禁止使用临时表;2、 数据表的存储引擎只能为InnoDB;3、 外键列(曾经加入FOREIGN关键词的那一表)和参照列(外键列所参照的那一列)必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同,而字符的长度则可以不同;4、 外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。l 编程数据表的默认存储引擎:对于MySQL数据库,如果你要使用事务以及行级锁就必须使用INNODB引擎。如果你要使用全文索引,那必须使用MYISAM。 INNODB的实用性,安全性,稳定性更高但是效率比MYISAM稍差,但是有的功能是MYISAM没有的。修改MySQL的引擎为INNODB,可以使用外键,事务等功能,性能高。修改my.ini,在mysqld下加上:default-storage-engine=INNODB代码mysqlCREATE TABLE provinces ( -id smallint unsigned PRIMARY KEY AUTO_INCREMENT, - pname varchar(20) NOT NULL)如右图所示,修改后引擎变为INNODB。2014.12.29l 实例:创建一个user子表,其pid外键列参照刚才的provinces表(此称为父表)中的id列:mysql create table user( - id smallint unsigned primary key auto_increment, - username varchar(10) not null, - pid bigint, 数据类型不同,不能创建:ERROR 1215 (HY000): Cannot add foreign key constraint- pid smallint, 没有符号位,不能创建:ERROR 1215 (HY000): Cannot add foreign key constraint- pid smallint unsigned, 与参与列中数据类型相同、一样有符号位才能创建 - foreign key(pid) references provinces(id) - );由于已经修改过引擎,并且参考列在创建主键时自动生成索引,外键列的pid没有创建过索引,也会自动生成索引,如下图,出现两个索引,分别是id和pid。查找索引命令:mysql show indexes from userG; 参数G以树状形式显示(大写)2015.1.1l 外键约束的参照操作1、 CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。创建一个user1表其pid外键列参照刚才的provinces(此处更该为pro)表的id列,并且使用cascade命令操作:mysql create table user1( - id smallint unsigned auto_increment primary key, - username varchar(20) not null, - pid smallint unsigned, - foreign key(pid) references pro(id) on delete cascade);其次,先往pro表添加记录,再往user1表中添加记录:mysql insert pro(pname) values(A);mysql insert pro(pname) values(B);mysql insert pro(pname) values(C);mysql insert user1(username,pid) values(Tom,3);mysql insert user1(username,pid) values(John,7); 输入pid为7时,父表不存在,报错,但id号还是自增,如右图id为2的记录为空:mysql insert user1(username,pid) values(John,1);mysql insert user1(username,pid) values(Rose,3);然后对表进行删除操作,须添加条件,删除命令执行后,子表和父表的记录均同时被删除,其最后结果如下图所示:mysql delete from pro where id=3; 2、 SET NULL:从父表删除或更新行,并设置子表中的外键列为null。如果使用该选项,必须保证子表列没有指定not null。3、 RESTRICT:拒绝对父表的删除或更新作。4、 NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。 修改数据表:l 添加单/多列:如上面user1表,单列添加age和 password,多列添加truename和emaill。其命令如下:mysql alter table user1 add age tinyint unsigned not null default 10; 添加默认约束defaultmysqlalter table user1 add password varchar(32) not null after username; after在*后面插入数据mysql alter table user1 add (truename varchar(12) not null,emaill varchar(64) default null); 多列添加只能从数据表的后面堆,不能使用after、first命令。l 删除单/多列:将上表的进行单列删除truename,和多列删除password,emaill,命令如下:mysql alter table user1 drop truename;mysql alter table user1 drop password, drop emaill; 执行多条命令可以使用逗号隔开mysql alter table user1 drop age,add sex enum(boy,gril); 删除的同时也可以添加,执行不同命令l 添加约束:先添加一个简单的新表,如右图:mysql create table user2( - username varchar(10) not null, - pid smallint unsigned);- alter table user2 add id smallint unsigned not null;1、添加主键约束: mysql alter table user2 add constraint PK_user2_id primary key(id); constraint指定一个名字(接后面)。2、添加唯一约束:mysql alter table user2 add unique(username);3、添加外键约束:mysql alter table user2 add foreign key(pid) references pro(id);4、添加默认约束:mysql alter table user2 add age tinyint unsigned not null;mysql alter table user2 alter age set default 15;mysql alter table user2 add emill varchar(64) default ; l 删除约束:1、删除主键约束:mysql alter table user2 drop primary key; 主键只的一个,无须添加名字2、删除唯一约束:mysql show indexes from user2G; 先查看表中唯一约束,有两个:1.row,2.rowmysql alter table user2 drop index username; 唯一约束有多个,须添加名字。删除后2.row没有了。3、删除外键约束:mysql show create table user2; 查看系统默认给外键起的别名CONSTRAINT user2_ibfk_1mysql alter table user2 drop foreign key user2_ibfk_1;4、删除默认约束:mysql alter table user2 alter emill drop default; 最后结果如下:l 修改列定义和更名数据表:1、修改列定义:mysql alter table user2 modify id samllint unsigned not null first; 将id的位置更换到顶端mysql alter table user2 modify id tinyint unsigned not null; 将id的数据类型更换为tinyint2、修改列名称:mysql alter table user2 change pid p_id tinyint unsigned not null; 将pid名称该为p_id并将其数据类型更为tinyint。3、数据表更名:建议不随意使用,特别是引用了表名的情况下。方法一:mysql alter table user2 rename user3;方法二:mysql rename table user3 to user2;最后结果: 数据表的记录操作l 插入记录:新建一个新表:mysql create table user3( - id smallint unsigned primary key auto_increment, - username varchar(20) not null, - password varchar(60) not null, - age tinyint unsigned not null default 0, - sex boolean);1、插入数据INSERT values:mysql insert user3 values(null,Tom,123,25,1); 使用null,可以让id实现自增mysql insert user3 values(null,John,345,24,0);mysql insert user3 values(default,Hany,466,26,0); 使用default,也可以让id实现自增mysql insert user3 values(default,Jack,466,3*7+3,1); 可以使用表达式3*7+3mysql insert user3 values(default,Shen,768,default,1); 可以对age使用默认值mysql insert user3 values(default,Wang,566,20,0),(default,Baly,458,12*2,1); 一次输入多行mysql insert user3 values(null,Biao,md5(123),default,1); md5即密码123以哈希值的形式出现2、插入记录INSERT SET:与第一种方法的区别在于,此方法可以使用子查询,但只能一次性插入一条记录。如上例继续添加一条记录:mysql insert user3 set username=Ben,password=879; 默认值可以不写,如下面的id为9的记录最后结果:3、插入记录SELECT:此方法可以将查询结果插入到指定数据表。先建立一个空表:mysql create table user4( - id tinyint unsigned primary key auto_increment, - username varchar(20);将上面的user3表中的部分数据插入到user4表中:mysql insert user4(username) select username from user3 where age22;将user4表中年龄大于22岁的username添加到user3表中的username,如上图所示:l 单表记录更新UPDATE:mysql update user3 set age=age+2; 将age都加2mysql update user3 set age=age+id,sex=0; 将age的值加上id的值,并且sex全部更为0mysql update user3 set age=age+2 where id%2=0; 将id号为偶数的age都加上2结果如下:l 单表删除DELETE:mysql delete from user3 where id=6; 删除id号为6的记录mysql insert user3 values(null,Test,123,33,1); 重新插入的记录,不会顶替id为6的记录。 查询表达式:l select直接调用函数:如右所示:mysql select version();mysql select now();l 查询表达式select_expr:每一个表达式表示想要的一列,必须有至少一个。多个列之间以英文逗号分隔。星号 * 表示所有列。tb1_name.*可以表示命名表的所有列。查询表达式可以使用ASalias_name为其赋予别名。别名可用于GROUP BY,ORDRE BY或HAVING子句。mysql select id,username,age from user3; 只查询user3表中id,username,age三个记录 mysql select username,id from user3; 将查询表的顺序可以任意调换mysql select user3.id,user3.username from user3; tb1_name.*可以表示命名表的列mysql select id as userId,username as Uname from user3; 使用别名的形式查询,建议加上asmysql select id username from user3; 不加as,此处会将id的别名该为username,而不是查询出两列记录l 条件查询WHERE:对记录进行过滤,如果没有指定WHERE语句,则显示所有记录。在WHERE表达式中,可以使用MySQL支持的函数或运算符。(后面详解)l 查询结果分组GROUP BY:mysql select age from user3 group by age; 指定表名称age里面的值分组,有相同的则被合并mysql select password from user3 group by 1;指定表位置password以1开头的(不建议使用)l 分组条件HAVING:mysql select username,password from user3 group by password having password400; 查找username,password两条记录中,以password的值分组,并只列出 password大于400的值。其结果如右所示:mysql select sex from user3 group by 1 having count(id) =3; 可以使用count函数或表达式使用l order by对结果排序:mysql select * from user3 order by id desc; desc以id号倒序形式排列mysql select * from user3 order by age,id desc; 先以age排序,遇到age相同时再以id倒序l 限制查询结果返回的数量LIMIT:mysql select * from user3 limit 5; 对查询的结果只取前5个mysql select * from user3 limit 1,4; 对查询的结果从第2开始取4条记录。(默认从0开始)mysql select * from user3 order by id desc limit 3,3; 以id进行倒序,再将结果从第4列开始取3条记录 子查询l 导入数据mysql show variables like %char%; 查看当前编码mysqlSET NAMES latin1 统一指定编码,设置为latin1 如下图所示:然后导入数据,建立一个tdb_goods表。【数据链接点此】2015.1.2l 子查询基本概念:子查询SubQuery是指出现在其它SQL语句内的SELECT子句。例如:SELECT * FROM t1 WHERE col1=(SELECT col2 FROM t2) 其中SELECT * FROM t1称为外层查询/声明,col2 FROM t2则为子查询。子查询指嵌套在查询内部,且必须始终出现在圆括号内。而事实上它有可能在子查询内部再嵌套子查询。子查询可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等。子查询的外层查询可以是SELECT、INSERT、UPDATE、SET或DO。l 由比较运算符引发的子查询使用比较运算符的子查询:=、=、=、!=、语法结构:operand comparison_operator subquery例子:不使用子查询方式:mysql select round(avg(goods_price),2) as avg_price from tdb_goods; 求所有电脑产品的平均价格四舍五入,并且保留两位小数:AVG,MAX,MIN、COUNT、SUM为聚合函数mysql select goods_id,goods_name,goods_price from tdb_goods where goods_price5397.77 order by goods_price desc; 查询所有价格大于平均价格的商品,并且按价格降序排序对上面例子使用子查询来实现以上功能:mysql select goods_id,goods_name,goods_price from tdb_goods where goods_price(select round(avg(goods_price),2) from tdb_goods) order by goods_price desc;对于返回结果有多个时,须使用关键字:ANY,SOME和ALL。ANY 和SOME符合返回结果集其中的一个即可,等价于 IN,而ALL是要符合全部。例子:查询价格大于或等于超级本价格的商品,并且按价格降序排列:mysql SELECT goods_price FROM tdb_goods WHERE goods_cate = 超级本; “超记本”的商品价格mysql SELECT goods_id,goods_name,goods_price FROM tdb_goods - WHERE goods_price = (SELECT goods_price FROM tdb_goods WHERE goods_ cate = 超级本) 此处直接写 = 时报错: Subquery returns more than 1 row,由于超级本的价格返回多个结果,取大于等于超级本的价格系统不知道是4999、4299还是7999,所以报错-WHERE goods_price = ANY(SELECT goods_price FROM tdb_goods WHERE goods_cate = 超级本) = ANY 或 = SOME 等价于 IN,此得=ANY即返回的结果集只要大于任意一个即可 - ORDER BY goods_price DESC; l 由NOT IN/EXISTS引发的子查询:=ANY运算符与IN等效!=ALL 或 ALL 运算符与 NOT IN等效EXISTS 是判断是否存在,和in类似,但效率要比in高。平时较少使用。如上例中的语句:-WHERE goods_price = ANY(SELECT goods_price FROM tdb_goods WHERE goods_cate = 超级本),可以更改为以下两种形式:-WHERE goods_price IN(SELECT goods_price FROM tdb_goods WHERE goods_cate = 超级本)-WHERE goods_price EXISTS (SELECT goods_price FROM tdb_goods WHERE goods_cate = 超级本)l 使用INSERT.SELECT插入记录时使用子查询:首先创建“商品分类”表:mysql CREATE TABLE IF NOT EXISTS tdb_goods_cates( -cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, - cate_name VARCHAR(40) );查询tdb_goods表的所有记录,并且按类别分组,结果如下左:mysql SELECT goods_cate FROM tdb_goods GROUP BY goods_cate; 将分组结果写入到tdb_goods_cates数据表,如下右图:mysql insert tdb_goods_cates(cate_name) select goods_cate from tdb_goods group by goods_cate;l 多表更新一步到位:对于上面的例子,在创建tdb_goods_cates表后,需要对tdb_goods的goods_cate记录进行更新,即把文字形式的如台式机、游戏本换成tdb_goods_cates对应的cate_id。通过tdb_goods_cates数据表来更新tdb_goods表:mysql update tdb_goods inner join tdb_goods_cates on goods_cate=cate_name set goods_cate=cate_id;使用CREATE.SELECT可以将创建数据表和写入记录一步到位,如下例,创建一个tdb_goods_brands品牌表并将tdb_goods表中的brand_name记录写入,如下左图:mysql CREATE TABLE tdb_goods_brands ( - brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, -brand_name VARCHAR(40) NOT NULL) -SELECT brand_name FROM tdb_goods GROUP BY brand_name;通过tdb_goods_brands数据表来更新tdb_goods数据表(红体为写法会报错):mysql update tdb_goods inner join tdb_goods_brands on brand_name=brand_name set brand_name=brand_id; ERROR 1052 (23000): Column brand_name in field list is ambiguous报错原因在于两张表的brand_name名字相同mysql update tdb_goods as g inner join tdb_goods_brands as b on g.brand_name=b.brand_name set g.brand_name=b.brand_id; 引用相同表字体需加表名或别名,具体用法下个章节讲tdb_goods修改后如下图右(部份),goods_cate及brand_name都被外键引用:通过ALTER TABLE语句可以修改数据表结构,如下图为tdb_goods表修改前后的区别:mysql alter table tdb_goods change goods_cate cate_id smallint unsigned not null,change brand_name brand_id smallint unsigned not null; 将goods_cate和 brand_name两列修改其名称及数据类型 连接JOIN:l 连接的语法结构MySQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作。数据表可以使用tbl_name AS alias_name或tbl_name alias_name赋予别名。(AS可以省略)连接一共有三种连接方式:内连接、左外连接、右外连接。在MySQL中,JOIN、CROSS JOIN和INNER JOIN是等价的。LEFT JOIN左外连接,RIGHT JOIN右外链接。使用ON关键字来设定连接条件,也可以使用WHERE来代替。通常使用ON关键字来设定连接条件,使用WHERE关键字来进行结果集记录的过滤。内连接:显示左表及右表符合连接条件的记录。(使用较多)左外链接:显示左表的全部记录及右表符合连接条件的记录。右外链接:显示右表的全部记录及左表符合连接条件的记录。l 三种连接的演示:首先分别在tdb_goods_cates、tdb_goods_brands和tdb_goods表插入新记录:mysql insert tdb_goods_cates(cate_name) values(路由器),(交换机),(网卡);mysql insert tdb_goods_brands(brand_name) values(海尔),(清华同方),(神舟);mysql insert tdb_goods(goods_name,cate_id,brand_id,goods_price) values(LaserJet Pro P1606dn 黑白激光打印机,12,4,1849);然后使用内连接、左连接及右连接方式查看,分别如下图的结果:mysql select goods_id,goods_name,cate_name from tdb_goods inner join tdb_goods_cates on tdb_goods.cate_id = tdb_goods_cates.cate_idG; 内连接mysql select goods_id,goods_name,cate_name from tdb_goods le

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论