MySQL数据库的认识和常见命令
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发。MySQL 是最流行的关系型数据库管理系统之一,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
@
一、MySQL数据库是什么?
数据库有很多种,按照时间发展来,大致分为网状形数据库、层次型数据库、关系型数据库、面向对象数据库。其中关系数据库是理论最成熟,应用最广泛的数据库。目前关系型数据库有 Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL。
其中MySQL具有功能强、使用简单、管理方便、运行速度快、可靠性高、安全保密性强等优点(而且是免费的。。。),使用得很广泛。
二、SQL语句是什么?
SQL的全称是 Structured Query Language ,也就是结构化查询语言。是操作和检索关系数据库的标准语言,标准的SQL语言可用于操作任何关系型数据库
通常SQL语句可分为:
查询语言:主要有select关键字完成,查询语言是SQL语言里功能最多的语句
DML语句:数据操作语言,主要由 insert、update和delete关键字完成
DDL语句:数据定义语言,主要由create、alter、drop和truncate四个关键字构成
DCL语句:数据控制语言,主要由 grant 和revoke两个关键字完成,一般不用程序员完成,用的很少
事务控制语句:主要由commit、rollback、savepoint三个关键字完成
三、关于数据库的基本命令
登录数据库(为了安全,语句中的密码也可以先不写)
mysql -u 用户名 -p 密码 ;
用户创建新的数据库
create database 数据库名;
用户删除指定数据库
drop database 数据库名;
使用指定数据库
use 数据库名;
查看数据库的所有表(先使用数据库)
show tables;
查看表结构
desc 表名
四、DDL语句
DDL语句是操作数据库对象的语句,可以创建(create)、删除(drop)和修改(alter)数据库对象,而最基本的数据库对象是表(数据库不仅仅只有表)
1. 要创建一张 test 表
编号 | 姓名 | 年龄 | 性别 |
---|
建表语句,需要约束,以保证数据的完整性,后面说,这里只是定义了表的结构,定义简单的类型,还没添加数据
create table test(
-- 可以有多个列定义,每列逗号分隔,最后一列没有
test_id int , --定义第一列名为 test_id,数据为 int 类型
test_name varchar(20),--第二列名为 test_name,数据长度不超过20的字符串
test_age int,--第三列名为 test_age ,数据为 int 类型
test_gender char(1)--第四列名为 test_gender ,字符串
......
);
2. 修改表结构的语法
使用alert table ,可以增加列,修改列,删除列,重命名等操作
增加列定义语法:
alert table test add(
-- 可以有多个列定义
test_add varchar(50)
......
);
修改列定义语法:
--将test表中的 test_id 列该成 int 类型的 test_day 列
alert table test test_age modify test_day int;
删除列定义语法:
--将test表中的 test_day 列删除
alert table test drop test_day;
数据表的重命名语法:
--将 test 表中的改名为 demo 表
alert table test rename to demo;
- 删除表的语法
删除表的语法为:drop table 表名
--例如删除 demo 表
--drop table 表名
drop table demo;
五、数据库的约束
在创建数据表时,不仅仅是向前面那样指定列定义,具备数据表的基本功能,还需要增加约束,约束是在表上强制执行数据的校验规则,可以更好的保证数据表里数据的完整性,而且,当多张表之间存在依赖关系时,还可以保护相关的数据不被删除。
5种完整性约束(大部分数据库都支持),可以在建表的时候指定,也可以在建表完成后再进行修改表操作,完成增加约束:
NOT NULL:非空约束,指定某列不能为空
NUIQUE:唯一约束,指定某列或者几列组合不能重复
PRIMARY KEY:主键,指定该列的值可以唯一的标识该条记录
FOREIGN KEY:外键,指定该行记录从属主表中的一条记录,用于保证参照的完整性
CHECK:检查,指定一个布尔表达式,用于指定对应列的值必须满足该表达式
例如重新创建上面的 test 表
create table test(
-- 可以有多个列定义
test_id int primary key, --主键(唯一,默认非空)
test_name varchar(20) unique, --唯一(该表数据名字不能重复)
test_age int not null, --非空
test_gender char(1)--第四列名为 test_gender ,字符串
check(test_age>0) --CHECK约束
......
);
外键约束,下面创建教师表和学生表
--先创建主表
create table teacher(
t_id int auto_increment, --自动增长
t_name varchar(30) ,
primary key (t_id) --这种方式同样可以设置主键
);
create table student(
s_id in auto_increment primary key,
s_name varchar(30),
--外键格式:foreign key(外键列列名) references 主表名(主表的主键)
foreign key(mysql_teacher) references teacher(t_id)
);
六、DML语句是什么?
DDL操作的是数据库对象,而DML操作的是数据表里的数据,可以完成:插入新数据、修改数据、删除数据
1. insert into 语句
往这张表插入数据("1","张无忌","24","男")
编号 | 姓名 | 年龄 | 性别 |
---|---|---|---|
语法格式: |
--insert into 表名(列1,列2...)value(列1值,列2值...);
insert into test(t_id,t_name,t_age,t_gender) value("1","张无忌","24","男");
或者可以这样写,省略列名,但是后面的值注意要和表的列一致
insert into test value("2","叶孤城","31","男");
结果为
编号 | 姓名 | 年龄 | 性别 |
---|---|---|---|
1 | 张无忌 | 24 | 男 |
2 | 叶孤城 | 31 | 男 |
2. update 语句
用于修改数据表的记录,通过使用 where 限定条件,省略 where 条件会将该表该列同时修改,比如将上表的张无忌年龄改成30
语法格式为:
--update 表名 set 列名=30 where 条件;
update test set t_age=30 where t_id=1;
3. delete from语句
用于删除指定数据表的记录,不需要指定列名,因为是整行删除,后面可以用 where 指定记录,当不写where条件时,整张表数据都被删除
语法格式为:
--删除test表中 t_id等于1的记录
--delete from 表名 [ where 条件 ]
delete from test where t_id=1;
七、功能最丰富的查询语句
select语句的功能就是查询数据,也是SQL语句里面功能最丰富的语句,select不仅可以单表查询,还可以多表查询、子查询等
1. 单表查询
查询语句:
--查询 test表所有age大于20的数据的id和名字
select t_id,t_name from test where t_age > 20;
--查询 tes 表所有 age大于20的所有数据
select * from test where t_age > 20;
--将在test表中查询到的 t_name 拼接上 "拼接的内容"
select concat(t_name,"拼接的内容") from test;
2. 分组查询
查询语句:
--将查询到的数据按照gender分组
select * from student group by gender;
3. 多表查询
查询语句:
--查询 teacher(教师表)和student(学生表)为男性的数据
select * from teacher,student where gender="男";
去除重复行:distinct
--就算有同名,也只会显示一个名字
select distinct nane from teacher where gender="男";
自然连接查询:natural join (自然连接查询会以两表中同名列作为连接条件)
--查询两张表中,学生表的全部和教师表的名字,语句中的student s ,用于简写,前面可以用 s 表示student表,因为先运行后面的代码
select s.*,t.t_name from student s natural join teacher t;
on 子句查询:也是很常用的连接方式
--join 连接另一张表,使用 on 来指定条件
select student.s_name,course.* from student join course on student.s_id = course.c_id;
4. 子查询
子查询其实就是在查询语句中嵌套另外一个查询,子查询可以多层嵌套
--将(select * from teacher)当成数据表来用
select * from (select * from teacher) where age>20;