CREATE DATABASE 库名 DEFAULT CHARSET=UTF8;
mysql> create DATABASE python21 default charset=utf8;
在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以需要选择即将要操作的数据库。
mysql> USE python21;
Database changed
删库有风险,动手需谨慎!执行删除命令后,所有数据将会消失。
DROP DATABASE 数据库名;
# 删除姓名为Python21的数据库
mysql> DROP DATABASE python21;
创建MySQL数据表需要以下信息:
CREATE TABLE 表名(
字段名 类型 [字段约束],
字段名 类型 [字段约束],
字段名 类型 [字段约束]
...
)DEFAULT CHARSET=UTF8;
练习:
-- 创建student表,字段:主键 数值类型 无符号 不为空 自增,姓名 变长字符 不为空,年龄 数值类型,性别 数值类型 默认值为1 不为空,电话 变长类型,地址 变长
create table student(
id int unsigned not null primary key auto_increment,
name varchar(4) not null,
age int,
sex int default 1 not null,
tel varchar(20),
adress varchar(255)
)default charset=utf8;
-- 创建baixing表,字段:主键 数值类型 不为空 自增,标题 变长字符,更新时间 变长,浏览人数 变长,公司名称 变长
create table baixing(
id int not null primary key auto_increment,
title varchar(50),
update_time varchar(50),
see_count varchar(10),
company varchar(50)
)default charset=utf8;
-- 创建user表,字段:主键 数值类型 不为空 自增,姓名 变长字符 不为空,邮箱 变长,性别 变长,电话 变长
create table user(
id int not null primary key auto_increment,
name varchar(10) not null,
email varchar(20),
sex varchar(3),
tel varchar(20),
adress text
)default charset=utf8;
SHOW CREATE TABLE 表名\G;
SHOW CREATE TABLE 表名
DESC 表名;
指定数据库后,可以查看当前数据库下的所有数据表的列表
mysql> SHOW TABLES;
通用格式
ALTER TABLE 表名 ACTION(更改选项);
alter table 表名 add 新字段名 类型 约束; (默认在最后一列添加)
alter table 表名 add 新字段名 类型 约束 after 指定字段名;
# 在user表的最后追加一个num字段 设置为int not null
alter table user add num int not null;
# 在user表的email字段后添加一个age字段,设置int not null default 20;
alter table user add age int not null default 20 after email;
# 在user表的最前面添加一个aa字段设置为int类型
alter table user add aa int not null first;
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新字段类型 新字段约束
ALTER TABLE 表名 MODIFY 字段名 新字段类型 新字段约束
# 修改user表中age字段为tinyint、无符号、默认值为20
alter table user modify age tinyint unsigned not null default 20;
# 修改user表的age字段改为nianling字段并修改类型为int,默认值99
alter table user change num mm int not null default 10;
ALTER TABLE 表名 DROP 字段名
# 删除user表的aa字段
alter table user drop aa;
ALTER TABLE 旧表名 RENAME AS 新表名
MySQL数据库中的表类型一般常用两种:MyISAM和InnoDB
ALTER TABLE 表名 ENGINE="InnoDB"
MyISAM类型中的表数据增删 改速度快,不支持事务,没有InnoDB安全
InnoDB类型的表数据 增删改 速度没有MyISAM的快,但支持事务,相对安全
MyISAM类型的数据文件有三个frm(结构)、MYD(数据)、MYI(索引)
InnoDB类型的数据文件只有一个 .frm(表结构).ibd(数据 索引)
DROP TABLE 表名 ;
删除了数据表kong
DROP TABLE kong;
INSERT INTO 表名(field1, field2,...fieldN)VALUES (value1, value2,...valueN);
insert into student(id,name,age,sex,adress,tel) values(1,'张三',20,'男','天上','110');
如果字段约束允许传入空值,那么插入数据时此类字段可以不进行添加
insert into student(name,adress) values('王二麻子','火星');
insert into student(name,age,sex,adress) values('王二麻子','32','女','月球');
insert into student values(null,'来来',21,'女','月亮','114');
不指定字段名插入数据时,如果id字段约束为主键,自增,id值可以给null,或者实际编号,但是需要给值保证插入数据的数量和字段数量一致
insert into student (name,age,sex,adress,tel) values
('你猜',12,'男','天上','120'),
('你猜1',12,'女','天上1','119'),
('你猜2',12,'男','天上','120'),
('你猜3',12,'男','天上','120'),
('你猜4',12,'男','天上','120'),
('你猜5',12,'男','天上','120');
insert into users(username,pssword,sex,age) values
('张洁','123456','1','25'),
('志飞','123456','1','30'),
('艺哲','123456','1','38'),
('晁博','123456','0','16'),
('赤峰','123456','0','40'),
('豪哥','123456','0','60');
SELECT * FROM 表名 ;
SELECT 字段1,字段2 FROM 表名;
工作中尽量不使用select * 来查询数据
SELECT * FROM 表名;
+----+----------+-----+-----+---------+
| id | name | age | sex | classid |
+----+----------+-----+-----+---------+
| 1 | zhangsan | 20 | m | lamp138 |
| 2 | lisi | 20 | m | lamp138 |
| 3 | wangwu | 21 | w | lamp138 |
| 4 | zhaoliu | 25 | w | lamp94 |
| 5 | uu01 | 26 | m | lamp94 |
| 6 | uu02 | 28 | w | lamp92 |
| 7 | qq02 | 24 | m | lamp92 |
| 8 | uu03 | 32 | m | lamp138 |
| 9 | qq03 | 23 | w | lamp94 |
| 10 | aa | 19 | m | lamp138 |
| 11 | sad | 35 | m | lamp94 |
| 12 | tt | 25 | m | lamp92 |
| 13 | wer | 25 | w | lamp94 |
| 14 | xx | 25 | m | lamp92 |
| 15 | kk | 0 | w | lamp94 |
+----+----------+-----+-----+---------+
15 rows in set (0.00 sec)
SELECT 字段1, 字段2,... FROM 表名;
SELECT name, age FROM user;
SELECT name FROM user;
+----+----------+------
| id | name | age |
+----+----------+------
| 1 | zhangsan | 20 |
| 2 | lisi | 20 |
| 3 | wangwu | 21 |
| 4 | zhaoliu | 25 |
| 5 | uu01 | 26 |
| 6 | uu02 | 28 |
| 7 | qq02 | 24 |
| 8 | uu03 | 32 |
+----+----------+------
8 rows in set (0.00 sec)
# 查询班级表中python03的学生信息
select * from class where class_name='python03';
# 查询age为12的男生信息
select * from stu where age=12 and sex='男';
# 查询id号值在5以上的学生信息
select * from stu where id>5;
# 查询年龄在20至25岁的学生信息
select * from stu where age>=20 and age<=25;
select * from stu where age between 20 and 25;
# 查询年龄不在20至25岁的学生信息
select * from stu where age not between 20 and 25;
select * from stu where age<20 or age>25;
# 查询id值为1,3,5,7,9的学生信息
select * from stu where id in (1,3,5,7,9);
select * from stu where id=1 or id=3 or id=5 or id=7 or id=9;
# 查询lamp138和lamp94期的女生信息
select * from stu where classid in('lamp138','lamp94') and sex='w';
select * from stu where (classid='lamp138' or classid='lamp94') and sex='w
select [字段列表] from 表名
[where 搜索条件]
[group by 分组字段]
[order by 排序]
[limit 分页]
-- 查询name字段值是以zh开头的所有信息
select * from stu where name like "zh%";
-- 查询name字段值是张开头的所有信息
select * from users where username like '张%';
-- 查询姓名name中含有ang子串的所有信息
select * from stu where name like "%ang%";
--查询姓名name中含有字母i的所有信息
select * from users where username like '%i%';
--查询姓名是任意四位字符构成的信息。
select * from stu where name like "____";
--查询姓名是任意2位字符构成的信息。
select * from users where username like '__';
SELECT * FROM 表名 ORDER BY 字段名 排序规则
-- 按年龄升序排序查询学生信息
mysql> select * from stu order by age;
--默认asc升序 可省略
mysql> select * from stu order by age asc;
-- 年龄降序排序
mysql> select * from stu order by age desc;
-- 查询学生信息,按班级做升序排序,相同班级按年龄降序排序
mysql> select * from stu order by classid asc,age desc;
COUNT(*) 函数返回在给定的选择中被选的行数
-- 获取学生表中最大、最小以及平均年龄是多少?
mysql> select max(age),min(age),avg(age) from stu;
-- 统计当前表中有多少条数据
select count(id) from users;
-- 获取学生表中男生m的数量
select count(*) from users where sex='1';
-- 统计班级信息,按性别分组,并统计每组人数;
MySQL> select sex,count(*) from stu group by sex;
-- 统计每个班级的人数
MySQL> select classid,count(*) from stu group by classid;
-- 统计每个班级的,男生和女生各多少人数。
MySQL> select classid,sex,count(*) from stu group by classid,sex;
SELECT * FROM 表名 LIMIT num; 查询数据只显示前m条
SELECT * FROM 表名 LIMIT m,n; 排除前m条,然后再查询出前n条
-- 查询前5条信息
mysql> select * from stu limit 5;
-- 排除前2条后再获取4条信息
mysql> select * from stu limit 2,4;(下标从0开始)
-- 以4条数据分一页,取第一页
mysql> select * from stu limit 0,4;
-- 以4条数据分一页,取第二页。
mysql> select * from stu limit 4,4;
-- 以4条数据分一页,取第三页。
mysql> select * from stu limit 8,4;
-- 以4条数据分一页,取第四页。
mysql> select * from stu limit 12,4;
分页公式:.... (页号-1)*页大小, 页大小;
-- 查询某个数据表的总数据量
mysql> select count(id) from 表名
-- 获取年龄最大的5位学生信息?
mysql> select * from stu order by age desc limit 5;
-- 统计每个班级的人数,按人数从大到小排序,取前3条。
mysql> select classid,count(*) num from stu group by classid order by num desc limit 3;
-- 更新表中所有行
UPDATE 表名 SET 字段1=值1,字段2=值2,字段n=值n...;
-- 添加过滤条件表示更新表中特定行
UPDATE 表名 SET 字段1=值1,字段2=值2,字段n=值n... WHERE 条件;
-- 将id为11的age改为35,sex改为m值
mysql> update stu set age=35,sex='m' where id=11;
-- 将id值为12和14的数据值sex改为m,classid改为lamp92
mysql> update stu set sex='m',classid='lamp92' where id=12 or id=14
-- 二者等价
mysql> update stu set sex='m',classid='lamp92' where id in(12,14);
-- 修改id为1,2,3的数据
mysql> update users set age='20' where id=1 or id=2 or id=3;
-- 将id为11的age改为35,sex改为0值
update users set age="35",sex='0' where id=11;
-- 将id值为6和9的数据值sex改为0,email改为[email protected]
update users set sex='0',email='[email protected]' where id=6 or id=9;
-- 将姓名为张三并且年龄是20的数据,密码改为747474
update users set pssword='74747' where username="张三" and age=20;
-- 更新年龄小于20的用户密码 为abc
update users set pssword='abc' where age<'20';
-- 从表中删除所有行
DELETE FROM 表名;
-- 从表中删除特定的行
DELETE FROM 表名 [WHERE 条件]
-- 删除stu表中id值为100的数据
mysql> delete from stu where id=100;
-- 删除stu表中id值为20到30的数据
mysql> delete from stu where id>=20 and id<=30;
-- 删除stu表中id值为20到30的数据
mysql> delete from stu where id between 20 and 30;
-- 删除stu表中id值大于200的数据
mysql> delete from stu where id>200;
TRUNCATE TABLE 表名;
-- 清空class表的数据
truncate table class:
第一:
1、delete:在删除记录的时候可以有选择的删除某些数据(使用where子句),当然,如果不添加where子句,就是删除所有记录;
2、trancete:是清空表中所有数据,没有其他选择是否删除特定数据
第二:
1、当表中的主键是自动增长(auto_increment)时,用delete删除完数据之后,再往表中插入数据,不指定主键的值,使其自动增长时,并不是从1开始,delete虽然删除了数据,但是并没有将主键自增(auto_increment)重新设为1
2、truncate不仅将数据全部清空,还将主键自增的值初始为1
3、delete只删数据,不清痕迹;trancate既删数据,又清痕迹
第三
1、效率上truncate比delete快,delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。
第四
1、delete 语句是数据库操作语言(dml),这操作进行事务提交之后才生效
2、truncate是数据库定义语言(ddl),执行操作之后立即生效,不需要进行事物的提交,原数据也不能回滚,数据删除后不能恢复
show variables like 'autocommit'\G