数据库(数据管理,数据存储的仓库)
数据库管理系统(操纵和管理数据库的大型软件)
SQL是操作关系型的编程语言,是一套标准
MySQL下载安装完成以后,可以进行启动和停止操作,对于启动和停止,有两个方法1.在控制台直接输入services.msc在里面找到MySQL进行停止和启动。2.直接在控制台中输入net start mysql80启动数据库,输入net stop mysql80停止。
Sql语句也会有分类,DDL语句:主要用来定义数据库对象的,像数据库,表,字段。
DML语句:数据操作语言,用来完成数据库表中的增删改的操作
DQL语句:数据查询语言,用来查数据库中表的记录
DCL语句:数据控制语言,用来创建数据库用户"用户!!!!!",控制数据库的访问权限。
关系型数据库:建立在关系型模型基础上,有多张相互连接的二维表组成的数据库(RDBMS)。
接下来,我们学习MySQL的停用语法与分类
1.DDL语句,数据定义语言,用来定义数据库对象(数据库,表,字段)
2.DML语句数据操作语言,用来对数据库中的数据进行增删改。
3.DQL语句,数据查询语句,用来查询数据库中的表的记录。
4.DCL语句,数据控制语言,用来创建数据库用户,控制数据库的访问权限
DDL语句是用来定义字段,表的语句。
1.查询所有数据库:SHOW DATABASES;
2.查询当前数据库:SELECT DATABASE();
3.创建 CREATE DATABASE[IF NOT EXISTS]数据库名[DEFAULT CHARSET字符集][COLLATE排序规
注意:[IF NOT EXISTS]的作用是,如果这个数据库不存在,就创建这么一个数据库,如果存在,则不进行任何操作。
4.删除:DROP DATABASE[IF EXISTS]数据库名;
5.使用:USE 数据库名;
那么,如何通过DDL语句来完成对数据库中表结构的操作呢?
有如下语法:
SHOW TABLES;查询当前数据库的所有表。
DESC表名;查询表结构。
SHOW CREATE TABLE 表名;查询指定表的建表语句。
当然,以上的语法必须先进入到一个具体的数据库才可以。也就是必须先使用一个数据库才可以。
当然了,也可以创建一个表结构使用CREATE TABLE语法可以创建一个表结构。我编写了一个表,语法如下: create table user(
-> id int comment ‘编号’
-> )comment ‘用户表’;
MySQL中的数据类型有很多,主要分为三类:数值类型,字符串类型,日期时间类型。
首先来看看数值类型
1.TINYINT 大小:1byte
2.SMALLINT 大小:2bytes(类型有点像java语言中的short)
3.MENDIUMINT 大小:3bytes
4.int 大小:4bytes
5.BIGINT 大小:8bytes
以上五种都是整型数值。
1.FLOAT 大小:4byte
2.DOUBLE 大小:8byte
3.DECTMAL
以上是浮点型的数值。
数值的存储范围会因为有符号和无符号而发生改变,有符号就是带负数的,例如TINYINT是从-128到127这是有符号的,如果是无符号的,就是从0到255我们在写代码的时候,要根据实际情况来决定是使用有符号的还是使用无符号的
如果使用无符号的,需要在数据类型后加上UNSIGNED例如:age TINYAGE UNSIGEND
那么接下来来说一下字符串类型的数值
1.CHAR 定长字符串 一般要在后面大括号标记字符长度CHAR(10) 相比于VARCHAR性能高一些
2.VARCHAR 变长字符串 也需要标记字符长度
3.TINYBLOB 不超过255个字符的二进制数据
4.TINYTEXT 短本字符串
5.BLOB 二进制形式的长文本数据
6.TEXT 长文本数据
7.MENDIUMBLOB 二进制形式的中等长度文本数据
8.MENDIUMTXET 中等长度文本数据
9.LONGBLOB 二进制形式的极大长度的文本数据
10.LONGTXET 极大文本数据
二进制的数据包括安装包,音频之类的数据。
因为CHAR的性能要高一些,所以当字符串长度固定时,使用CHAR,当字符串长度会变化时就要使用VARCHAR。
接下来,介绍一下日期类型数据
1.DATE:日期值,几年几月几日
2.TIME:时间值,几时几分几秒
3.YEAR:年分值,几几年
4.DATETIME:混合日期和时间值,几年几月几日几时几分几秒
5.TIMESTAMP:混合日期和时间值,时间戳
一般DATE,TIME,DATETIME会使用的多一些。
记忆起来也比较轻松,date就是日期,year就是年份,time就是某一个时间,datetime就是年月日加时间。
接下来,我们用所学的数据类型来设计一张表,要包含以下数据:1.编号2.员工工号3.员工姓名4.性别5.年龄6.身份证号7.入职时间(取值年月日就可以了)代码如下:
create table user(
-> id int comment '编号',
-> name varchar(50) cooment '姓名',
-> gender varchar(1) comment '性别',
-> age int comment '年龄'
-> )comment '用户表';
使用desc emp;代码,得到结果如下:
±-----------±-----------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-----------±-----------------±-----±----±--------±------+
| id | int | YES | | NULL | |
| worknumber | varchar(10) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| gender | char(1) | YES | | NULL | |
| age | tinyint unsigned | YES | | NULL | |
| idcard | char(18) | YES | | NULL | |
| entrydate | date | YES | | NULL | |
±-----------±-----------------±-----±----±--------±------+
出现了以上的结果,表结构就已经算是创造完成了。||
接下来,我们学习一下DDL语句的修改操作
ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释][约束];(添加字段)
案列,在刚刚写的emp表中增加一个新的字段,名字叫做nickname,VARCAHR(20);
代码如下:
alter table emp add nickname varchar(10);
然后可以再次使用desc语句,查看表格有没有添加成功。
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);(修改数据类型)
代码如下:
alter table emp modify nickname varchar(30);
一样的,可以使用desc emp来查看有没有修改成功。
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度);(修改字段名和字段类型)
代码如下:
alter table emp change nickname nickname2 varchar(40);
案例:将emp表中的nickname字段修改为username,类型为varchar(30)
±-----------±-----------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-----------±-----------------±-----±----±--------±------+
| id | int | YES | | NULL | |
| worknumber | varchar(10) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| gender | char(1) | YES | | NULL | |
| age | tinyint unsigned | YES | | NULL | |
| idcard | char(18) | YES | | NULL | |
| entrydate | date | YES | | NULL | |
| username | varchar(30) | YES | | NULL | |
±-----------±-----------------±-----±----±--------±------+
删除字段怎么删除呢?ALTER TABLE 表名 DROP 字段就可以。
代码如下:
alter table emp drop nickname2;
这样,就可以轻松删除表格中的某一个字段了。
最后一个修改的操作,修改表名。
ALTER TABLE 表名 RENAME TO 新表名;
我将emp表修改表名为emo,请看结果
alter table emp rename emo;
±--------------+
| Tables_in_zzz |
±--------------+
| emo |
| user |
±--------------+
删除表应该怎么操作呢?
drop table [if exit]表名;
如果想删除表中的数据,可以使用TRUNCATE TABE 表名;
这两种删除的方法,最后导致的结果都是两个表的数据全都会被删除掉。
DML语句也叫做数据操作语言,用来对数据库中的表的数据记录进行增删改操作。
1.添加数据(INSERT)
2.修改数据(UPDATE)
3.删除数据(DELET)
1.添加数据:
给指定字段添加数据 INSERT INTO 表名(字段名1,字段名2…)VALUES(值1,值2…);
给全部字段添加数据 INSERT INTO 表名 VALUES(值1,值2,…);
批量添加数据
INSERT INTO 表名(字段名1,字段名2,…)VALUES(值1,值2,…),(值1,值2,…),(值1,值2…);
INERT INTO 表名VALUES(值1,值2…),(值1,值2…),(值1,值2);
注意:插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
字符串和日期数据应该包含在引号中。
插入的数据大小,应该在字段的规定范围内。
那么,应该如何修改数据呢?
设计到一个新的关键字UPDATE
UPDATE 表名 SET 字段名=值1,字段名=值2,…[WHERE条件];
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
实例:
ID name age
1,DDD,10
2,zzz,20
1.将ID为1的数据的name修改为QQQ。
套用上述语法update user set name = ‘QQQ’ where id=1;可以将ZZZ更改为QQQ;
2.修改ID为1的数据,将name修改为小刀,age修改为15。
继续套用上述语法可得
update user set name=‘小刀’,age=15 where id =1;
3.将所有人的年龄改为50;
update user set age=50;
这就已经可以了。
在完成上述操作时,我总是会查看表中的数据,这里有一个查看表中数据的一个语句。
SELECT*FROM 表名;
可以直接看到数据。
删除数据应该怎么做呢?
有个语句
DELETE FROM 表名[WHERE 条件]
DQL语句是用来查询表中的记录的,需要用到关键字select,在正常的业务系统中,查询的频率是最高的
首先是DQL的关键字:
1.select后面跟着的是字段列表。
2.from后面跟着的是表名列表。
3.where后面跟着的是条件。
4.grop by是分组字段列表。
5.having是分组后条件列表。
6.order by是排序字段列表。
7.limit是分页参数。
首先介绍的是DQL语句的基本查询
1.查询多个字段:select 字段一,字段二,字段三…FROM 表名;
这里我做一下示范。
代码如下: select name,gender from user;这样可以查询到表格中某一个字段所记录的数据。
2.select FROM 表名.
这个我经常用到,会展示这个表格中每一个字段以及记录的数据,就是展现出表格中的所有的内容。
同样的我也会做一个示范:
select * from user;这样就可以将表格中的内容都展现出来。
在具体的开发工作室中,尽量不要去写尽量的写出需要查询的所有字段,这样会方便后续人员查看代码。
查询也有去重的操作:语法是:select distinct 字段列表 from 表名。可以去除重复的记录。
使用as关键字可以对所查询的字段取别名,在表头处可以展示所取的别名。
代码展示:
select workaddress as’工作地址’ from ts;
使用as关键字以后先前设置的字段名会被抹去,留下的会是as关键字之后的字符串,也就是别名。
接下来,介绍条件查询。
关键字为where
语法:select 字段列表 from 表名 where 条件列表。
条件列表后面可以跟上比较运算符,也就是大于小于之类的运算符<>和!=是不等于。
比较运算符中还有一类为BETWEEN…AND 指在某个范围之内。
BETWEEN后跟最小值,AND后跟最大值。
in指在in之后列表的值,多选一。
LIke,占位符(模糊查询 _匹配单个字符,%匹配任意个字符)
逻辑运算符(AND或 &&)并且
(||或OR)或者
(NOT 或!)非运算
案例一:查询年龄为18的员工.
select * from ts where age=19;
案例二:查询年龄小于20的员工:
select * from ts where age<20;
案例三:查询没有身份证号的员工
select * from ts where idcard is NULL;
案例四:查询有身份证号的员工:
select * from ts where idcard is not NULL;
案例五:
查询年龄在15到18之间的员工:
select * from ts where age between 15 and 18;
案例六:查询年龄在25岁以下,并且性别为女的信息:
select * from ts where age<25&&gender=‘女’;
案例七:查询年龄为18或者19的信息:
select * from ts where age in(18,19);
in的作用是多选一,只要在括号范围内满足其一的就可以。
案例八:查询姓名为两个字的员工信息(使用占位符LIKE):
select * from ts where name like ‘__’;(这里是两个下划线,表示两个字符)
案例九:查询身份证最后一位=7的员工信息:
select * from ts where idcard like ‘%7’;
%的意思就是身份证前面多少位无所谓,只要保证最后一位是7就可以。
当然l,因为_匹配一个字符,也可以让前面的所有位数都用下划线替代,在最后一位用7,也可以达到相同的效果。