操作命令:

创建表

创建表基础命令

mysql -- 格式: CREATE TABLE [表名] ([列名 1 ] [列类型],[列名 2 ] [列类型],[列名 3 ] [列类型] ); -- 例如: CREATE TABLE STU (ID INT,NAME VARCHAR (20),AGE INT );

注意:

创建表前,要先选中某个数据库(use [数据库名称]);

列和列之间用逗号隔开,列内用空格隔开;

创建表时,要根据需保存的数据创建相应的列,并根据要存储数据的类型定义相应的列类型。

约束条件

约束条件就是给列加一些约束,使该字段存储的值更加符合我们的预期。

| 约束条件 | 含义 | | -------------- | ------------------------------------------------------------ | | UNSIGNED | 无符号,值从0开始,无负数 | | ZEROFILL | 零填充,当数据的显示长度不够的时候可以使用填补0的效果填充至指定长度,字段会自动添加UNSIGNED | | NOT NULL | 非空约束,表示该字段的值不能为空 | | DEFAULT | 表示如果插入数据时没有给该字段赋值,那么就使用默认值 | | PRIMARY KEY | 主键约束,表示唯一标识,不能为空,且一个表只能有一个主键 | | AUTO_INCREMENT | 自增长,只能用于数值列,默认起始值从1开始,每次增长1 | | UNITQUE KEY | 唯一值,表示该字段下的值不能重复,可以为空,可以有多个 | | COMMENT | 描述 |

注意:

如果一列同时有UNSIGNED、ZEROFILL、NOT NULL这几个约束,UNSIGNED、ZEROFILL必须在NOT NULL前面,否则会报错。

例子:

mysql create table user_info_tab( user_id int not null auto_increment, user_name char(10), password varchar(10), user_nick varchar(10), card_num bigint, primary key(user_id) );

查看表

显示当前数据库中所有表的名字

格式:show tables;

显示某张表每一列的属性(列名、数据类型、约束)

格式:desc [数据表名称];

例如:

mysql desc user_info_tab;

删除表

格式:drop table [数据表名称];

例如:

mysql drop table hesheng;

修改表

向数据表中添加一列

格式:ALTER TABLE [数据表名称] ADD [列名] [列的数据格式] [约束];

例如:

mysql ALTER TABLE user_info_tab ADD phone VARCHAR(11);

PS:

默认自动添加到数据表字段的末尾;

如果要加在第一列在最后加个FIRST;

如果要加在某一列的后面,在最后面加个AFTER某一列列名。

删除数据表的某一列

格式:ALTER TABLE [数据表名称] DROP [列名];

修改列的类型和名称

ALTER TABLE [表名] MODIFY [列名] [数据格式];(列名不变,其他要变)

ALTER TABLE [表名] CHANGE [旧列名] [新列名] [数据格式];(列名也要改变)

5.数据表的增删改查

增(insert)

mysql -- 插入数据 INSERT INTO user_info ( user_id, user_name, PASSWORD, user_nick, card_num ) VALUES ( 1, 'zhangsan', 'abc123', 'zhangsanfeng', 124567894651329785 ), ( 2, 'lisi', '122bbb', 'limochou', 124567894651324567 ), ( 3, 'wangwu', '123aaa', 'wangbaiwan', 214567894651324567 ), ( 4, 'liuqi', '12aaa', 'liuchuanfeng', 214563356651324567 ), ( 5, 'zhangliu', '12aaa', 'zhangwuji', 214563356658966567 );

删(delete)

语法:

==delete from 表名 where 条件==

==delete语句不能删除某一列的值。(可以使用update 表名 set username = "" where userid = 1)==

==使用delete语句仅删除符合where条件的行的数据,不删除表中其他行和表本身。==

==truncate userinfotable(直接把数据清空掉)==

drop和delete的区别:question:(面试题)

drop是删除数据库、数据表、数据表中的某一列。

delete是删除某一行数据。

改(update)

语法:

==update 表名 set 列名=新值 where 列名=某值;==

==update语法可以新增、更新原有表行中的各列。==

==set子句指示要修改哪些列和要给予哪些值。==

==where子句指定应更新哪些行。如果没有where子句,则更新所有的行。==

mysql update user_info set username = "poopoo" where userid = 1;

查(select)

具体详情查看课后作业

6.数据表的排序、聚合命令、分组

排序(order by)

使用order by子句,对查询结果进行排序。

order by 指定排序的列 asc(升序)/desc(降序)。

order by 子句一般位于select语句的结尾。

mysql SELECT product_name,weight FROM products_info ORDER BY weight DESC;

聚合命令

distinct:对某一列数据去重。

语句:select distinct 列名 from 表名; -- 显示此列不重复的数据

count:统计总行数。

count(*):包括所有列,返回表中的总行数,在统计结果的时候,不会忽略值为Null的行数。

count(1):包括所有列,1表示一个固定值,没有实际含义,在统计结果的时候,不会忽略列值为Null的行数,和count(*)的区别是执行效率不同。

count(列名):只包括列名指定列,返回指定列的行数,在统计结果的时候,不统计列值为Null,即列值为Null的行数不统计在内。

count(distinct 列名):返回指定列的不重复的行数,在统计结果的时候,会忽略列值为NULL的行数(不包括空字符和0),即列值为NULL的行数不统计在内。

count(*)、count(1)、count(列名)执行效率比较:

如果列为主键,count(列名)优于count(1)

如果列不为主键,count(1)优于count(列名)

如果表中存在主键,count(主键列名)效率最优

如果表中只有一列,则count(*)效率最优

如果表中有多列,且不存在主键,则count(1)效率优于count(*)

MAX:最大值

MIN:最小值

AVG:平均值

SUM:求和

```mysql select max(列名) from 表名; select min(列名) from 表名; select avg(列名) from 表名; select sum(列名) from 表名;

也可以跟where子句 ```

limit:

语法:

select * from 表名 limit m,n;

其中m是指从哪行开始,m从0取值,0表示第一行。

n是指从第m+1条开始,取n条。

select * from 表名 limit 0,2(从第一行开始,显示两行结果)

如果只给定一个参数,它表示返回最大的行数目:

select * from table limit 5;查询前5行

limit n 等价于 limit 0,n

分组

GROUP BY

使用group by子句对列进行分组。

然后还可以使用having子句过滤,having通常跟在group by后,它作用于组。

不加having过滤:

select 列名,聚合函数 from 表名 where 子句 group by 列名;

加上having过滤:

select 列名,聚合函数 from 表名 where 子句 group by 列名 having 聚合函数 过滤条件;

注意:使用group by后只能展示分组的列名+聚合函数结果,因为其余列已经基于分组这一列合并。

mysql select sum(price), count(user_id), product_id from order_info_table group by product_id having count(user_id) > 2;

7.数据表的连接查询、子查询

两张表连接查询

INNER JOIN(内连接):获取两个表中字段匹配关系的行的所有信息。

语法:SELECT * FROM [表名] a INNER JOIN [表名] b ON a.[列名] = b.[列名];

例如:

sql SELECT * FROM user_info_table a INNER JOIN order_info_table b ON a.user_id = b.user_id; SELECT * FROM user_info_table a INNER JOIN order_info_table b ON a.user_id = b.user_id WHERE b.user_id IS NULL;

LEFT JOIN(左连接):获取左表所有行的信息,即使右表没有对应匹配的行的信息。右表没有匹配的部分用NULL代替。

语法:SELECT * FROM [表名] a LEFT JOIN [表名] b ON a.[列名] = b.[列名];

mysql SELECT * FROM products_info a LEFT JOIN suppliers_info b ON a.supplier_id = b.supplier_id;

RIGHT JOIN(右连接):与左连接相反,用于获取右表所有记录,及时左表没有对应匹配的行的所有信息,左表没有匹配的部分用NULL代替。

语法:SELECT * FROM [表名] a RIGHT JOIN [表名] b ON a.[列名] = b.[列名];

mysql SELECT * FROM products_info a RIGHT JOIN suppliers_info b ON a.supplier_id = b.supplier_id;

子查询(嵌套查询)

嵌套在其他查询中的查询。

语句:select 列名1 from 表1 where 列名2 in (select 列名2 from 表2 where 列名3 = 某某某);

注意:一般在子查询中,程序先运行嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试一下内层的子查询语句是否输出了想要的内容,再一层一层往外测试,增加子查询的正确率。

:monkey:补充:数据库名和表名在windows中是大小写不敏感的,而在大多数类型的UNIX系统中大小写是敏感的。

mysql测试数据插入工具 mysql创建测试表_主键

mysql测试数据插入工具 mysql创建测试表_mysql_02