这篇文章主要介绍了关系型数据库表,文章主要围绕关系型数据库表的相关资料如创建表、删除表、修改表、等展开内容,需要的朋友可以参考一下,希望对你有所帮助
目录
1、创建表1.1、创建表基本语法1.1.1、创建一张简单的表1.1.2、查看创建表定义2、删除表3、修改表3.1、修改表类型命令3.2、字段改名命令3.3、增加表字段命令3.4、删除表列字段命令3.5、表改名命令4、DML语句4.1、插入记录命令4.2、查看插入数据命令4.2.1、查询全部4.2.2、查询不重复记录命令关键字4.2.3、多条件查询关键字4.2.4、排序查询命名4.2.5、显示一部分,而不是全部,指令4.2.6、统计数据,聚合指令4.2.7、表连接4.2.8、子查询,相关关键字4.2.9、记录联合,指令4.3、更新记录命令4.4、删除记录命名4.5、初始化表5、DCL语句5.1创建数据库用户
1、创建表
1.1、创建表基本语法创建表tablename(列名1列类型1约束,
列_名称_2列_类型_2约束,…)
列名是列的名字
列类型是列的数据类型
约束是这个列的约束条件
1.1.1、创建一张简单的表
关系型数据库创建表orders (ordername varchar(10),createtime date,ordermoney decimal(10,2),order number int(2));
查询正常,0行受影响(0.23秒)
1.1.2、查看创建表定义
结构化定义:
mysql desc订单;
- - - - - -
| Field | Type | Null | Key | Default | Extra |
- - - - - -
| ordername | varchar(10)| YES | | NULL | |
|创建时间|日期|是| |空| |
| ordermoney | decimal(10,2) | YES | | NULL | |
|订单号| int(2)| YES | | NULL | |
- - - - - -
集合中有四行(0.00秒)
表详细定义:
查看详细的表定义:
MySQL show create table orders G;
*************************** 1.第*************************行
表格:订单
创建表:创建表"订单"(
` ordername varchar(10)默认为空,
“创建时间”日期默认为空,
“订单金额”十进制(10,2)默认为空,
`订单号 int(2)默认为空
)ENGINE=InnoDB默认字符集=latin1
集合中的一行(0.00秒)
错误:
未指定查询
由此可以看到表的引擎(存储引擎)是InnoDB
字符集(字符集)是拉丁语一
" G "选项的含义是使得记录能够按照字段竖着排列,对于内容比较长的记录更易于显示。
2、删除表
命令:
删除表表名
删除orders:
关系型数据库删除表订单
- ;
查询正常,0行受影响(0.14秒)
3、修改表
3.1、修改表类型命令ALTER TABLE tablename MODIFY[COLUMN]COLUMN _ definition[FIRST | AFTER col _ name]
例:
修改表命令的名字字段定义,将varchar(10)改为varchar(20):MySQL alter table orders modify ordername varchar(20);
查询正常,0行受影响(0.11秒)
记录:0重复项:0警告:0
mysql desc订单;
- - - - - -
| Field | Type | Null | Key | Default | Extra |
- - - - - -
| ordername | varchar(20)| YES | | NULL | |
|创建时间|日期|是| |空| |
| ordermoney | decimal(10,2) | YES | | NULL | |
|订单号| int(2)| YES | | NULL | |
- - - - - -
集合中有四行(0.00秒)
3.2、字段改名命令ALTER TABLE tablename CHANGE[COLUMN]old _ col _ name COLUMN _ definition
[第一个|在列名之后]
例:
表命令上将订单编号修改为订单编号mysql alter table订单更改列订单号订单号int(4);
查询正常,0行受影响(0.06秒)
记录:0重复项:0警告:0
mysql desc订单;
- - - - - -
| Field | Type | Null | Key | Default | Extra |
- - - - - -
| ordername | varchar(20)| YES | | NULL | |
|创建时间|日期|是| |空| |
| ordermoney | decimal(10,2) | YES | | NULL | |
|订单号| int(4)| YES | | NULL | |
- - - - - -
集合中有四行(0.00秒)
特别说明:
变更和修改都可以修改表的定义,不同的是变化后面需要写两次列名,不方便。但是变化的优点是可以修改列名称,修改则不能。3.3、增加表字段命令ALTER TABLE tablename ADD[COLUMN]COLUMN _ definition[FIRST | AFTER col _ name]
例:
表命令上新增加字段用户名,类型为varchar(3):mysql更改表顺序添加列用户名varchar(30);
查询正常,0行受影响(0.39秒)
记录:0重复项:0警告:0
mysql desc订单;
- - - - - -
| Field | Type | Null | Key | Default | Extra |
- - - - - -
| ordername | varchar(20)| YES | | NULL | |
|创建时间|日期|是| |空| |
| ordermoney | decimal(10,2) | YES | | NULL | |
|订单号| int(2)| YES | | NULL | |
|用户名| varchar(30) |是| |空| |
- - - - - -
一组5行(0.00秒)
3.4、删除表列字段命令ALTER TABLE tablename DROP[COLUMN]col _ name
例:
表命令上删除字段用户名:MySQL修改表订单删除列用户名;
查询正常,0行受影响(0.53秒)
记录:0重复项:0警告:0
mysql desc订单;
- - - - - -
| Field | Type | Null | Key | Default | Extra |
- - - - - -
| ordername | varchar(20)| YES | | NULL | |
|创建时间|日期|是| |空| |
| ordermoney | decimal(10,2) | YES | | NULL | |
|订单号| int(2)| YES | | NULL | |
- - - - - -
集合中有四行(0.00秒)
3.5、表改名命令更改表tablename重命名[到] new_tablename
例:
表命令名字改为货物订单mysql更改表顺序重命名货物订单
查询正常,0行受影响(0.16秒)
mysql desc订单;
错误1146 (42S02):表"订单管理.订单"不存在
mysql desc商品订单;
- - - - - -
| Field | Type | Null | Key | Default | Extra |
- - - - - -
| ordername | varchar(20)| YES | | NULL | |
|创建时间|日期|是| |空| |
| ordermoney | decimal(10,2) | YES | | NULL | |
|订单号| int(4)| YES | | NULL | |
- - - - - -
集合中有四行(0.00秒)
4、DML 语句
插入(插入)查询(选择)更新(更新)删除(删除)
4.1、插入记录 命令向表名(字段1,字段2,…字段n)中插入值(值1,值2,…值sn);
例:
表货物订单中插入一条记录,订单名称为张,创造时间为2021-05-12,订单金额为100.00,订单号为:1关系型数据库插入到商品订单(订单名称、创建时间、订单金额、订单编号)值(张, 2021-05-12 ,100.00,1);
查询正常,1行受影响(0.03秒)
也可以省略(场1,场2,…场n)这一部分
mysql插入商品订单值(张1 , 2021-05-12 ,1001.00,11);
查询正常,1行受影响(0.05秒)
4.2、查看插入数据命令4.2.1、查询全部
SELECT * FROM tablename[其中条件]
例:
查看货物订单中所有插入数据mysql select * from goodsorders
- - - -
|订单名称|创建时间|订单金额|订单编号|
- - - -
|张| 2021-05-12 | 100.00 | 1
|张1 | 2021-05-12 | 1001.00 | 11
- - - -
集合中的2行(0.00秒)
其中"*"表示要将所有的记录都选出来
4.2.2、查询不重复记录命令关键字
明显的
例:
查询非货物订单中非重复创建时间(创建时间)的数据mysql select * from goodsorders
- - - -
|订单名称|创建时间|订单金额|订单编号|
- - - -
|张| 2021-03-11 | 50.00 | 1
|李| 2020-05-12 | 70.00 | 15
|李| 2020-03-12 | 70.00 | 15
|李| 2020-03-11 | 70.00 | 15
|李| 2021-03-11 | 70.00 | 15
- - - -
一组5行(0.00秒)
关系型数据库从货物订单中选择不同的创建时间
-
|创建时间|
-
| 2021-03-11 |
| 2020-05-12 |
| 2020-03-12 |
| 2020-03-11 |
-
集合中有四行(0.00秒)
由此可以看到,将重复的一条时间数据2021-03-11去掉了
4.2.3、多条件查询关键字
在哪里后面的条件是一个字段的=比较,还可以使用、=、=、=等比较运算符;
多个条件之间还可以使用或者、和等逻辑运算符进行多条件联合查询,
例:
查询非货物订单中订单名称=李并且创建时间为2020-03-11MySQL select * from goods orders where ordername= Li and create time= 2020-03-11 ;
- - - -
|订单名称|创建时间|订单金额|订单编号|
- - - -
|李| 2020-03-11 | 70.00 | 15
- - - -
集合中的一行(0.00秒)
4.2.4、排序查询命名
SELECT * FROM tablename[其中条件][按字段1排序[DESC|ASC],字段2
[desc]菲尔德DESC语
例:
把货物订单表中的记录按照创建时间高低进行排序显示MySQL select * from goods orders order by create time;
- - - -
|订单名称|创建时间|订单金额|订单编号|
- - - -
|李| 2020-03-11 | 70.00 | 15
|李| 2020-03-12 | 70.00 | 15
|李| 2020-05-12 | 70.00 | 15
|张| 2021-03-11 | 50.00 | 1
|李| 2021-03-11 | 70.00 | 15
- - - -
一组5行(0.01秒)
4.2.5、显示一部分,而不是全部,指令
选择……[极限偏移_开始,行_计数]
偏移_开始表示记录的起始偏移量
行计数表示显示的行数
例如1
:显示货物订单表中按照创建项目排序后的前3条记录:MySQL select * from goods orders order by create time limit 3;
- - - -
|订单名称|创建时间|订单金额|订单编号|
- - - -
|李| 2020-03-11 | 70.00 | 15
|李| 2020-03-12 | 70.00 | 15
|李| 2020-05-12 | 70.00 | 15
- - - -
集合中的3行(0.00秒)
例如2:
如果要显示货物订单表中按照创建项目排序后从第二条记录开始,显示3条数据:MySQL select * from goods orders order by create time limit 2,3;
- - - -
|订单名称|创建时间|订单金额|订单编号|
- - - -
|李| 2020-05-12 | 70.00 | 15
|张| 2021-03-11 | 50.00 | 1
|李| 2021-03-11 | 70.00 | 15
- - - -
集合中的3行(0.00秒)
4.2.6、统计数据,聚合指令
SELECT [field1,field2,…fieldn] fun_name
来自表名
[哪里哪里条件]
[按字段1、字段2、……字段n分组
[带汇总]]
[有where _条件]
参数说明:
1.fun_name表示要做的聚合操作,也就是聚合函数。常用的有sum(总和)、count(*)(记录数)、max(最大值)和min(最小值)。
2.GROUP BY关键字指示要分类和聚合的字段。例如,如果要按部门分类统计员工人数,则部门应写在group by之后。
3.WITH ROLLUP是一个可选语法,指示是否在分类和聚合后汇总结果。
4.拥有关键字意味着再次过滤分类结果。
注意:
having和where之间的区别在于,having有条件地过滤聚合结果,而where在聚合前过滤记录。如果逻辑允许的话,我们尽量先用where过滤记录,这样聚合效率会因为结果集减少而大大提高,最后再根据逻辑看是否用having再过滤。例1:
查询并统计goodsorders表中的记录总数MySQL select count(1)from goods orders;
-
|计数(1) |
-
| 5 |
-
集合中的1行(0.00秒)
例2:
在此基础上,根据创建日期(createtime)进行组统计mysql select createtime,count(1)from good orders group by create time;
- -
|创建时间|计数(1) |
- -
| 2020-03-11 | 1 |
| 2020-03-12 | 1 |
| 2020-05-12 | 1 |
| 2021-03-11 | 2 |
- -
集合中有4行(0.00秒)
例3:
在此基础上,需要按照创建日期(cretetime)进行分组统计,计算出总数。mysql select createtime,count(1)from good orders group by create time with roll up;
- -
|创建时间|计数(1) |
- -
| 2020-03-11 | 1 |
| 2020-03-12 | 1 |
| 2020-05-12 | 1 |
| 2021-03-11 | 2 |
| NULL | 5 |
- -
一组5行(0.02秒)
在最上面一行,由null显示的数字是总数。
例4:
组按创建日期(createtime)统计,且数量大于1。mysql通过具有count(1)1的createtime从goodsorders组中选择createtime,count(1 );
- -
|创建时间|计数(1) |
- -
| 2021-03-11 | 2 |
- -
集合中的1行(0.00秒)
例5:
查询goodsorders表中ordermoney的总金额、最小金额和最大金额。mysql select * from goodsorders
- - - -
|订单名称|创建时间|订单金额|订单编号|
- - - -
|张| 2021-03-11 | 50.00 | 1
|李| 2020-05-12 | 70.00 | 15
|李| 2020-03-12 | 70.00 | 15
|李| 2020-03-11 | 70.00 | 15
|李| 2021-03-11 | 70.00 | 15
- - - -
一组5行(0.00秒)
mysql从goodsorders中选择sum(ordermoney)、max(ordermoney)、min(order money);
- - -
|总和(订单金额)|最大值(订单金额)|最小值(订单金额)|
- - -
| 330.00 | 70.00 | 50.00 |
- - -
集合中的1行(0.02秒)
4.2.7、表连接
1.
左连接:
包含左表中的所有记录,甚至右表中与之不匹配的记录;关键指令:左连接2.
右连接:
包含右表中的所有记录,甚至包括左表中与其不匹配的记录;命令:右连接例1:
现在我们又创建一张用户表(成员),使用好订单进行左连接,查询关联的用户表信息mysql select * from成员
- -
| id |成员名|
- -
| 15 |张|张
1 |李|
| 13 | liss |
- -
集合中的3行(0.00秒)
mysql select * from goodsorders
- - - - -
|订单名称|创建时间|订单金额|订单编号| memberid |
- - - - -
|张| 2021-03-11 | 1 | 50.00 | 15
|李| 2020-05-12 | 70.00 | 15 | 1
|李| 2020-03-12 | 70.00 | 15 | 1
|李| 2020-03-11 | 70.00 | 15 | 3
|李| 2021-03-11 | 70.00 | 15 | 1
- - - - -
一组5行(0.00秒)
MySQL select * from good orders left join member on good orders。memberid=成员。id;
- - - - - - -
|订单名称|创建时间|订单金额|订单编号|成员id | id |成员名称|
- - - - - - -
|张| 2021-03-11 | 50.00 | 1 | 15 | 15 |张
|李| 2020-05-12 | 70.00 | 15 | 1 | 1 |李
|李| 2020-03-12 | 70.00 | 15 | 1 | 1 |李
|李| 2021-03-11 | 70.00 | 15 | 1 | 1 |李
|李| 2020-03-11 | 70.00 | 15 | 3 | NULL | NULL |
- - - - - - -
一组5行(0.00秒)
例2
:成员和货物订单中数据不变,我们再来看一下右连接的查询,以及结果:MySQL select * from good orders right join member on good orders。memberid=成员。id;
- - - - - - -
|订单名称|创建时间|订单金额|订单编号|成员id | id |成员名称|
- - - - - - -
|张| 2021-03-11 | 50.00 | 1 | 15 | 15 |张
|李| 2020-05-12 | 70.00 | 15 | 1 | 1 |李
|李| 2020-03-12 | 70.00 | 15 | 1 | 1 |李
|李| 2021-03-11 | 70.00 | 15 | 1 | 1 |李
| NULL | NULL | NULL | NULL | NULL | 13 | liss |
- - - - - - -
一组5行(0.00秒)
这里发生了翻转,变为左侧货物订单表中的一条数据为空了
4.2.8、子查询,相关关键字
主要包括在、不在、=、=、存在、不存在等
例:
从货物订单表中查询所有用户在成员表中的记录mysql select * from成员
- -
| id |成员名|
- -
| 15 |张|张
1 |李|
| 13 | liss |
- -
集合中的3行(0.00秒)
mysql select * from goodsorders
- - - - -
|订单名称|创建时间|订单金额|订单编号| memberid |
- - - - -
|张| 2021-03-11 | 1 | 50.00 | 15
|李| 2020-05-12 | 70.00 | 15 | 1
|李| 2020-03-12 | 70.00 | 15 | 1
|李| 2020-03-11 | 70.00 | 15 | 3
|李| 2021-03-11 | 70.00 | 15 | 1
- - - - -
一组5行(0.00秒)
MySQL select * from goods orders where memberid in(select id from member);
- - - - -
|订单名称|创建时间|订单金额|订单编号| memberid |
- - - - -
|张| 2021-03-11 | 1 | 50.00 | 15
|李| 2020-05-12 | 70.00 | 15 | 1
|李| 2020-03-12 | 70.00 | 15 | 1
|李| 2021-03-11 | 70.00 | 15 | 1
- - - - -
一组四行(0.05秒)
4.2.9、记录联合,指令
从T1级(一种通讯线路的名称)中选择*
联合|联合所有
从t2中选择*
……
联合|联合所有
SELECT * FROM tn
UNION 和 UNION ALL 的主要区别:
联合所有是把结果集直接合并在一起,
联盟是将联合所有后的结果进行一次独特的,去除重复记录后的结果。
例1:
将成员表和货物订单表中的用户编号id(成员id)的集合显示出来MySQL select memberid from goods orders union all select id from member;
-
| memberid |
-
| 15 |
| 1 |
| 1 |
| 3 |
| 1 |
| 15 |
| 1 |
| 13 |
-
一组8行(0.00秒)
例2:
如果希望将上面的结果去掉重复记录后显示MySQL select memberid from goods orders union select id from member;
-
| memberid |
-
| 15 |
| 1 |
| 3 |
| 13 |
-
集合中有四行(0.00秒)
4.3、更新记录命令更新表名集字段1=值1,字段2 .=值2,…字段n=值n[其中COND
ITION]例:
将表 goodsorders 中ordername为zhang的订单金额(ordermoney)改为50mysql> update goodsorders set ordermoney=50.00 where ordername=zhang;Query OK, 1 row affected (0.09 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from goodsorders;+-----------+------------+------------+--------------+| ordername | createtime | ordermoney | ordernumbers |+-----------+------------+------------+--------------+| zhang | 2021-05-12 | 50.00 | 1 || zhang1 | 2021-05-12 | 1001.00 | 11 |+-----------+------------+------------+--------------+2 rows in set (0.00 sec)更新时,如遇到错误代码1175:
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences
解决方法:
1、先进行状体查询:
show variables like SQL_SAFE_UPDATES;2、执行下面的sql,关闭safe-updates模式:
SET SQL_SAFE_UPDATES = 0;或者
SET SQL_SAFE_UPDATES = false; 4.4、删除记录命名DELETE FROM tablename [WHERE CONDITION]例:
将表 goodsorders 中ordername为zhang1的记录全部删除mysql> delete from goodsorders where ordername = zhang1;Query OK, 1 row affected (0.06 sec)mysql> select * from goodsorders;+-----------+------------+------------+--------------+| ordername | createtime | ordermoney | ordernumbers |+-----------+------------+------------+--------------+| zhang | 2021-05-12 | 50.00 | 1 |+-----------+------------+------------+--------------+1 row in set (0.02 sec) 4.5、初始化表例:
将表中的所有数据清空mysql> select * from varc;+------+------+| v | c |+------+------+| abc | abc |+------+------+1 row in set (0.03 sec)mysql> truncate table varc;Query OK, 0 rows affected (0.25 sec)mysql> select * from varc;Empty set (0.00 sec) 5、DCL 语句DCL语句主要是为了管理数据库系统中的操作对象权限
5.1创建数据库用户例:
创建一个数据库用户 user1,初始密码为123,具有对 ordermanage 数据库中所有表的 SELECT/INSERT 权限:mysql> grant select,insert on ordermanage.* to user1@localhost identified by 123;Query OK, 0 rows affected, 1 warning (0.06 sec)mysql> exitByeC:Program FilesMySQLMySQL Server 5.7bin>mysql -uuser1 -p123mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 82Server version: 5.7.17-log MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type help; or h for help. Type c to clear the current input statement.mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || ordermanage |+--------------------+2 rows in set (0.00 sec)在此基础上,将此用户(user1)的insert权限进行收回
mysql> revoke insert on ordermanage.* from user1@localhost;Query OK, 0 rows affected (0.02 sec)mysql> exitByeC:Program FilesMySQLMySQL Server 5.7bin>mysql -uuser1 -p123mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 84Server version: 5.7.17-log MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type help; or h for help. Type c to clear the current input statement.mysql> use ordermanage;Database changedmysql> insert into member values(11,ss);ERROR 1142 (42000): INSERT command denied to user user1@localhost for table membermysql>由此可以看出插入权限不足,插入失败
到此这篇关于MYSQL表的介绍的文章就介绍到这了,更多相关MYSQL表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!