MySQL基础
MySQL
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
MySQL数据类型
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。
下面的表显示了需要的每个整数类型的存储和范围。
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
MySQL约束类型
约束名称 | 描述 |
---|---|
NULL | 空 |
NOT NULL | 非空 |
UNIQUE | 取值不允许重复(唯一) |
AUTO_INCREMENT | 自增 |
PRIMARY KEY | 主键(主关键字) |
FOREIGN KEY | 外键(外关键字) |
CHECK | 逻辑表达式约束 |
DEFAULT | 默认值(缺省值) |
MySQL语言分类
-
DDL:数据定义语言
-
create:创建数据库及其对象(包括新建表,索引,视图,存储过程等)
-
alter: 改变现有数据库的结构 (包括修改索引,修改字段类型,删除索引)
-
truncate: 删除表中所有记录,并删除已分配的空间
-
comment:添加注释
-
rename:重命名,其中包括索引、表名等。
具体操作:
创建数据库:create database 1907c charset=utf8;
删除数据库:drop database 1907c;
切换数据库:use 1907c;
创建表:create table user(
id int(11) primary key auto_increment,
name varchar(20) not null,
phone varchar(20)
);
查看表结构:desc user;
查看创建表的sql语句:show create table user;
修改表名:alter table user rename to student;
删除表:drop table student;
对表结构的添加字段:alter table user add sex char(2);
对表结构的删除字段:alter table user drop sex;
修改数据库的编码格式:alter database 1907c character set gbk
-
-
DML:数据操作语言
- insert:新增数据到数据库中
- update:更新表格中现有数据
- delete:删除现有数据
具体操作:
指定字段添加:insert into user(name) values (‘天上星’);
所有字段都添加内容:insert into user values (2, ‘刘星伸’, ‘15647419067’);
批量添加数据 多条数据用,隔开:insert into user values (3, ‘小星星’, ‘17735399067’), (4, ‘大星星’, ‘15647419067’);
批量修改:update user set name=‘刘星伸’;
指定数据修改需要添加 where 关键字: update user set name = ‘刘星伸’ where id=1;
删除:
逻辑删除 修改状态 比如银行卡 0 – 1
真实删除 将数据从数据库中完全删除(在开发过程中不存在真实/物理删除)
删除表中的所有数据:delete from users
删除指定数据:delete from user where id=2
- DQL:数据查询语言
- select:从数据库中检索数据
- DCL:数据控制语言
- grant:允许用户访问数据库的权限
- revoke:撤销用户访问数据库的权限
- commit:提交
MySQL操作
创建数据库:
create database 1907c charset=utf8;
删除数据库:
drop database 1907c;
切换数据库:
use 1907c;
创建表:
create table user(
id int(11) primary key auto_increment,
name varchar(20) not null,
phone varchar(20)
);
查看表结构:
desc user;
查看创建表的sql语句:
show create table user;
修改表名:
alter table user rename to student;
删除表:
drop table student;
对表结构的添加字段:
alter table user add sex char(2);
对表结构的删除字段:
alter table user drop sex;
修改数据库的编码格式:
alter database 1907c character set gbk
指定字段添加:
insert into user(name) values ('天上星');
所有字段都添加内容:
insert into user values (5, '刘星伸', '15647419067', '男');
批量添加数据 多条数据用,隔开:
insert into user values (3, '小星星', '17735399067', '男'), (4, '大星星', '15647419067', '男');
批量修改:
update user set name='刘星伸';
指定数据修改需要添加 where 关键字:
update user set name = '星' where id=1;
CREATE DATABASE books charset=utf8;
use books
create table book (
id int primary key auto_increment,
name varchar(50),
price double(11, 2),
author varchar(20),
publish varchar(50)
);
insert into book values
(1, '北平无故事', 25, '刘和平', '作家出版社'),
(2, '人间失格', 16, '太宰治著', '作家出版社'),
(3, '高兴', 16, '贾平凹', '人民出版社'),
(4, '源氏物语', 57, '刘和平', '人民出版社'),
(5, '卡夫卡文集', 9, '卡夫卡', '邮电出版社'),
(6, '大家', 12, '王蒙', '邮电出版社'),
(7, '拉片子', 37, '杨健', '清华出版社'),
(8, '古代散文', 5, '归有光', '安徽出版社'),
(9, '百花散文', 6, '孙虹选', '百花文艺出版社'),
(10, '方令孺散文集', 5, '方令孺', '安徽文艺');
查询所有图书的信息,并按价格降序显示:
select * from book ORDER BY price desc;
查询所有作家出版社的图书信息,并按价格降序显示:
select publish, name, price from book ORDER BY price desc;
查询出所有刘和平的图书信息 ,并输出:
select * from book where author='刘和平';
删除ID是2的记录,如果没有相关记录则提示:
delete from book where id=2;
将所有价格不足10元的图书调到10元,并查看信息:
update book set price=10 where price<10;
select * from book where price=10;
查看所有图书的价格情况,并升序显示:
select id,name,price from book ORDER BY price ASC;
查看所有价格低于20元的图书信息:
select * from book where price>20;
所有图书的价格上调20%,并查看信息:
update book set price=price*1.2;
CREATE DATABASE db_test charset=utf8;
use db_test
create table staff (
sid int primary key auto_increment,
sname varchar(20),
sex enum('男', '女'),
job varchar(20),
birthday DATE,
salary int(11),
comm int(11),
withhold int(11)
);
insert into staff values
(1001, '张三', '男', '高级工程师', '1975-1-1', 2200, 1100, 200),
(1002, '李四', '女', '助工', '1985-1-1', 1200, 200, 100),
(1003, '王五', '男', '工程师', '1978-11-11', 1900, 700, 200),
(1004, '赵六', '男', '工程师', '1979-1-1', 1960, 700, 150);
修改表名为emp:
alter table staff rename to emp;
向表中添加字段hobby,设置类型为varchar(50),设置唯一约束:
alter table emp add hobby varchar(50) unique;
向表中添加一条记录:
insert into emp value (1005, '星', '男', '测试', '1998-12-17', 9960, 700, 150, '电影,足球,纯音乐');
修改sname字段的类型为varchar(30):
alter table emp change sname sname varchar(30);
查询表中sid字段的值从是1002或1003或1005员工的所有记录:
select * from emp where sid=1002 or sid=1003 or sid=1005;
修改表中job值是高级工程师员工的job为“架构师”:
update emp set job='架构师' where job='高级工程师';
删除表中sid是1003并且sname是王五的员工的记录:
delete from emp where sid=1003 and sname='王五';
修改表中sid是1004员工的salary在原来的基础上-300:
update emp set salary=salary-300 where sid=1004;