mysql入门

启动mysql:net start mysql;
登录本机:mysql -u root -p;
mysql -hip -uroot -proot;

创建:
创建数据库:create database db1;
创建数据库2:create database if not exists db2;
create database db3 character set gbk;
create database if not exists db3 character set gbk;

查询:
查询数据库:show databases;
查询某一数据库:show create database db1;

修改:
修改数据库字符格式:alter database db1 character set gbk;

删除:
drop database db1;
drop database if exists db1;

使用数据库:
查询当前数据库名称:select database();
use db1;

操作表:
查询数据库中所有表名称:show tables;
查询表结构:desc 表名;
select * from 表名;

创建表:
create table 表名(
列名1 数据类型1,
列名2 数据类型2
);
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
复制表:create table 表名 like 表名;

删除表:drop table 表名;
drop table if exists 表名;

修改表:
修改表名:
alter table 旧表名 rename to 新表名;
查看表的字符集:
alter table 表名 character set 字符集名称;
添加一列:
alter table 表名 add 列名 数据类型;
修改名称 类型:
alter table 表名 change 列名 新列 新数据类型;//改变新的一种类型的列
alter table 表名 modify 列名 新数据类型;//只改变列的名称
删除列:
alter table 表名 drop 列名;

添加数据:INSERT INTO student(id,NAME,age,score) VALUES(2015,'tom',18,85.5);
删除一行数据:DELETE FROM student WHERE id=2015;
注意:全删数据:DELETE FROM student ;效率低,表头也删了
truncate table 表名:删除表,并创建一模一样的空表;

修改数据:
UPDATE student SET age=22,score=80.5 WHERE id=2015;
UPDATE student SET age=22;全部修改

查询数据

and or not is null
SELECT DISTINCT adress FROM student ;
SELECT math,english ,math+IFNULL(english,0) AS 总分 FROM student;
SELECT math 数学,english 英语,math+IFNULL(english,0) 总分 FROM student;
SELECT * FROM student WHERE age IN(18,20,25);
SELECT * FROM student WHERE age>=20;
SELECT * FROM student WHERE NAME LIKE '麦%';
SELECT * FROM student WHERE NAME LIKE '_邦%';
SELECT * FROM student WHERE NAME LIKE '___';
SELECT * FROM student WHERE NAME LIKE '%冰%';

DQL查询
SELECT * FROM student ORDER BY math ASC,english DESC;

聚合函数:
1、count: select count(math) from student;
选择非空的列进行计算
ifnull函数:SELECT COUNT(IFNULL(english,0)) FROM student;
2、sum:SELECT SUM(english) FROM student;
3、max:SELECT MAX(english) FROM student;
4、min:
5、avg:

分组查询:
查询男女同学的数学平均分:SELECT sex,AVG(math) FROM student GROUP BY sex;
SELECT sex,AVG(math) FROM student WHERE math>70 GROUP BY sex;
SELECT sex,AVG(math) FROM student WHERE math>70 GROUP BY sex HAVING count(id)>2;

分页查询:
SELECT * FROM student LIMIT 0,3;
开始的索引 = (当前的页码 - 1) * 每页显示的条数

## 约束:
1、非空约束(not null): 创建表时添加非空约束:CREATE TABLE student(
id int,
name varchar(20) NOT NULL
);
创建完添加非空约束:alert table student modify name varchar(20) not null;
修改非空约束:alert table student modify name varchar(20);
2、唯一约束(unique):创建表时添加唯一约束:CREATE TABLE student(
id int,
name varchar(20) unique
);可以有null但也只能有一个
删除唯一约束:alter table student drop index age;
表创建完后添加唯一约束:alter table student modify age int unique;
3、主键约束(primary key):非空且唯一,一张表只有一个字段为主键,主键就是表中记录的唯一主键
create table student(
id int primary key,
name varchar(32)
);
删除主键约束:alter table student drop primary key;
创建完表添加主键:alter table student modify id int primary key;
如果某一列是数值类型的,使用 auto_increment可以来完成值的自动增长;
删除自动增长:alter table student modify id int;
添加自动增长:alter table student modify id int auto_increment;
4、外键约束(foreign key):在创建表时,可以添加外键create table 表名(
...
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
删除外键:alter table 表名 drop foreign key 外键名称
添加外键:alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称);
级联更新:删除外键以后再执行级联更新,alter table 表名 add constraint 外键名称 foreign key (外键列表名称) references 主表名称(主表列名称) on update cascade;
级联删除:删除外键以后再执行级联更新,alter table 表名 add constraint 外键名称 foreign key (外键列表名称) references 主表名称(主表列名称) on update cascade on delete cascad;

数据库的设计:
多表之间的关系:
1、一对一:
2、一对多(多对一):在多地一方建立外键,指向一的一方的主键
3、多对多:需要中间表,至少包含两个字段,这两个字段作为中间表的外键,分别指向两张表的主键
数据库设计的范式:

数据库备份还原:mysqldump -uroot -proot 数据库名>保存路径

内连接查询:隐式内链接:使用where条件消除无用数据,选择列时两个表同名的字段前要加表的名称
SELECT c_id,c_name,teacher.t_id,t_name FROM course,teacher WHERE teacher.`t_id`=course.`t_id` ORDER BY c_id;-- 查询每个学科对应的老师
SELECT c_id,c_name,teacher.t_id,t_name FROM course t1(取别名在这取,然后再在前边用),teacher t2(取别名在这取,然后再在前边用) WHERE teacher.`t_id`=course.`t_id` ORDER BY c_id;
显式内连接:SELECT 字段列表 FROM 表名1 INNER(inner可省略不写) JOIN 表名2 ON 条件;
SELECT c_id,c_name,t1.t_id,t_name FROM course JOIN teacher t1 ON t1.`t_id`=course.`t_id`;
外连接查询:左外连接:查询的左表所有数据,以及交集部分,SELECT 字段列表 FROM 表名1(左表) LEFT OUTER(可省略不写) JOIN 表名2(右表) ON 条件;

右外连接:查询的右表所有数据,以及交集部分,SELECT 字段列表 FROM 表名1(左表) RIGHT OUTER(可省略不写) JOIN 表名2(右表) ON 条件;
子查询:查询中嵌套查询,称嵌套查询为子查询;
结果是单行单列的:SELECT * FROM student WHERE s_id=(SELECT s_id FROM score WHERE s_score=99);
结果是多行单列的:SELECT * FROM student WHERE student.`s_id`IN(SELECT score.`s_id`FROM score WHERE score.`s_score`>=90);
结果是多行多列的:子查询结果作为一张虚拟表;
事务: 开启事务,回滚,提交事务
四大特征:原子性,持久性,隔离性,一致性。
事务的隔离级别:

给两个有关联(外键)的表添加数据,要给次表添加数据则只能添加主编对应的行的数据
可以没限制的给主表添加数据;

 

posted @ 2019-01-23 10:54  塞翁失码  阅读(106)  评论(0编辑  收藏  举报