Mysql官网
www.mysql.com
Mysql安装
Ubuntu安装
- 安装服务端:
sudo apt-get install mysql-server
- 安装客户端:
sudo apt-get install mysql-client
- 配置文件:
/etc/mysql
- 命令集:
/usr/bin
- 数据库储存目录:
/var/lib/mysql
Windows安装
- 安装包:dev.mysql.com/downloads/mysql
- 安装教程
Mysql服务
- 查看Myql服务状态:
sudo/etc/init.d/mysql status
- 启动服务:
sudo /etc/init.d/mysql start|stop|restart
或sudo service mysql start|stop|restart
- 客户端连接服务:
mysql -h主机地址 -u用户名 -p密码
本地连接可省略主机地址如:mysql -uroot -p123456
- 关闭服务连接:ctrl+d或者exit
关系型数据库
- 数据表(table):存放数据的表格
- 字段(column):每个列,表示含义
- 记录(row):每个行,表示一组数据
SQL语言
结构化查询语言。用于存取数据以及查询、更新和管理关系数据库系统。
- 独立于数据库本身
- 不同数据库略有不同
- 命令以
;
结尾 - 命令不区分字母大小写
构建数据库
- 查看已有库:
show databases;
- 创建库:
create database 库名 [character set utf8];
例:创建名为stu的数据库,编码为utf8
creat database stu character set utf8;
或creat database stu charset=utf8;
- 查看创建的语句:
show create database 库名;
例:查看stu库的创建方法show create database stu;
- 查看当前所在库:
select database();
- 切换库:
use 库名;
- 删除库:
drop database 库名;
构建数据表
根据业务需要设计存储内容、根据存储内容构建表的字段结构、根据字段数据特征确定字段类型。
- 创建表:
creat table 表名( 字段名 数据类型 字段约束, 字段名 数据类型 字段约束, ... 字段名 数据类型 字段约束 );
- 数据类型支持
- ENUM:从给定值的集合中选择某一个值
定义格式:ENUM(值1,值2,……,值N)
- SET:从给定值的结合中选择一个或多个值
定义格式:SET(值1,值2,……,值N)
数据表示例
- 创建班级表
create table class_1( id int primary key auto_increment, name varchar(32) not null, age tinyint unsigned not null, sex enum('w','m'), score float default 0.0);
- 创建兴趣班表
create table interest( id int primary key auto_increment, name varchar(32) not null, hobby set('sing','dance','draw'), level char not null, price decimal(6,2),remark text);
数据表操作
- 查看数据表:
show tables;
- 查看已有表的字符集:
show create table 表名;
- 查看表结构:
desc 表名;
- 删除表:
drop table 表名;
数据操作语句
-
insert语句
insert into 表名 values (值1),(值2),···;
insert into 表名(字段1,···) values(值1),···;
例:向学生表中插入数据insert into class_1 values (2,'Baron',10,'m',91), (3,'Jame',9,'m',90);
-
select语句
select * from 表名 [where 条件];
select 字段1,字段2 from 表名 [where 条件];
例:
select * from class_1;
select name ,age from class_1;
-
where字句
通过一定的运算条件进行数据的筛选 -
算数运算符
+ | - | * | /或DIV | %或MOD |
---|---|---|---|---|
加法 | 减法 | 乘法 | 除法 | 取余 |
- 比较运算符
NOT或! | AND | OR | XOR |
---|---|---|---|
逻辑非 | 逻辑与 | 逻辑或 | 逻辑异或 |
- 位运算符
& | | | ^ | ! | << | >> |
---|---|---|---|---|---|
按位与 | 按位或 | 按位异或 | 取反 | 左移 | 右移 |
-
update语句
update 表名 set 字段1=值1,字段2=值2,··· where 条件;
例:
update class_1 set age=11 where name='Abby';
-
delete 语句
delete from 表名 where 条件;
(若不加where条件,则清空所有记录)
例:
delete from class_1 where name='Abby';
aleter和时间类型
-
修改表结构字段
alter table 表名 add 字段名 数据类型;
alter table 表名 add 字段名 数据类型 first;
alter table 表名 add 字段名 数据类型 after 字段名;
alter table 表名 drop 字段名;
alter table 表名 modify 字段名 新数据类型;
alter table 表名 change 旧字段名 新字段名 新数据类型;
alter table 表名 rename 新表名;
时间数据类型
-
时间和日期类型
- 日期
DATE
, 日期时间DATETIME
,时间戳TIMESTAMP
- 时间
TIME
- 年份
YEAR
类型 字节 范围 格式 用途 DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值 TIME 3 ‘-838:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间 YEAR 1 1901/2155 YYYY 年份值 DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值 TIMESTAMP 4 1970-01-01 00:00:00/2038 结束时间是第2147483647秒,北京时间2038-1-19 11:14:07,格林尼治时间2038年1月19日 凌晨03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳 - 日期
-
时间格式
- date:“YYYY-MM-DD”
- time:“HH:MM:SS”
- datetime:“YYYY-MM-DD HH:MM:SS”
- timestamp:“YYYY-MM-DD HH:MM:SS”
注意:1、datetime:以系统时间存储。2、timestamp:以标准时间存储但是查看时转换为系统时区,所以表现形式与datetime相同
-
时间日期函数
now()
返回服务器当前日期时间,格式对应datetime类型curdate()
返回当前日期,格式对应date类型curtime()
返回当前时间,格式对应time类型
-
时间运算
select * from 表名 where 字段名 运算符 (时间-interval 时间间隔单位);
时间间隔单位:2 hour、1 minute、2 second、2 year、3 month、1 day
例:查找注册时间在一周以内的记录
select * from marathon where registration_time>(now()-interval 7 day);
高级查询语句
-
模糊查询
LIKE用于在where子句中进行模糊查询,SQL LIKE子句中使用百分号%
来表示任意0个或多个字符,下划线_
表示任意一个字符。
使用LIKE子句从数据表中读取数据的通用语法:
SELECT field1,field2,···fieldn FROM table_name WHERE field1 LIKE condition1
例:
select * from class_1 where name like 'A%';
-
as 用法
在sql语句中as用于给字段或者表重命名,特别是一些名字比较长的表或者字段,可以简化表和字段的表达方式。
select name as 姓名,age as 年龄 from class_1;
select * from class_1 as c where c.age>17;
-
排序
ORDER BY子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。
使用ORDER BY 子句将查询数据排序后再返回数据:
SELECT field1,field2,···fieldn from table_name1 where field1 ORDER BY field1[ASC[DESC]]
默认情况ASC表示升序,DESC表示降序
select * from class_1 where sex='m' order by age;
-
限制
LIMIT子句用于限制由SELECT语句返回的数据数量或者UPDATE,DELETE语句的操作数量带有LIMIT子句的SELECT语句的级别语法:
SELECT column1,column2,columnn FROM table_name WHERE field LIMIT [num]
-
联合查询
UNION操作符用于连接两个以上的SELECT 语句的结果组合到一个结果结合中。多个SELECT语句会删除重复的数据。
UNION操作符语法格式:
SELECT expression1,expression2,··· expression_n FROM tables [WHERE conditions] UNION [ALL | DISTINCT] SELECT expression1, expression2,··· expression_n FROM table [WHERE conditions];
默认情况下UNION操作符已经删除了重复数据,所以DISTINCT修饰符对结果没啥影响。如果是ALL则返回所有结果集,包含重复数据。
select * from class_1 where sex='m' UNION ALL select * from class_1 where age>9;
-
子查询
当一个select语句中包含另一个select查询语句,则称为子查询的语句。- from之后,子查询的内容作为一个新的表内容,再进行外层select查询
select name from (select * from class_1 where sex='m') as s where s.score>90;
- where条件中,此时select查询到的内容作为外层查询的条件值
select * from class_1 where age=(select age from class_1 where name='Tom');
- from之后,子查询的内容作为一个新的表内容,再进行外层select查询