MySQL学习笔记分享
一、基础准备
本地登录(显示编写密码的形式)
mysql -uroot -p123456
本地登录(隐藏密码的形式)
mysql -uroot -p
Enter password: ******
(没有分号)
对齐表格
charset gbk;
二、字符集及字符序
查看当前MySQL实例使用的字符集
show variables like 'character%';
查看当前MySQL实例支持的字符序
show collation;
三、数据库
查看MySQL实例上所有的数据库
show databases;
创建choose数据库
create database choose;
创建并查看choose数据库
show create database choose;
使用数据库,自动操作choose数据库中所有数据库对象
use choose;
删除choose数据库
drop database choose;
如下操作避免出现已删除的数据库因再次执行删除命令而报错的情况
drop database choose if exists choose;
四、存储引擎
查看MySQL实例支持的存储引擎
show engines;
五、数据库表
创建数据库表
create table test(today daytime,name char(10)) engine=InnoDB charset=gbk;
查看表结构
desc test;
创建并查看数据库表
show create table test;
添加表字段
alter table test add today datetime not null;
插入表记录
use test;
insert into test values(now(), 'a');
查询表记录
select*from test;
修改表记录
(where前是新记录,where后是原记录)
update test set name='A' where name='a';
删除表记录
delete from test where name='d';
导入数据库
create database bjpowernode;
use bjpowernode;
source D:\Mysql\course\bjpowernode.sql;
导出数据库
mysqldump bjpowernode>D:\bjpowernode.sql -uroot -p
五、数据类型
数值类型
整数类型
tinyint有符号数和无符号数的取值范围分别是-128~127和0~255
由于负号占了一个数字位,因此tinyint默认的显示宽度为4
show databases;
create database temp;
use temp;
create table temp1(x tinyint,y smallint,z mediumint,m int,n bigint);
desc temp1;
小数类型
decimal(length, precision)用于表示精度确定
length:小数的最大位数
precision:设置精度
float和double在四舍五入时没有警告
float和double不指定精度时,默认实际精度
decimal不指定精度,默认为(10,0)
use temp;
create table emp2(x float(5,1),y double(5,1),z decimal(5,1));
insert into emp2 values(5.12,5.15,5.123);
select*from emp2;
日期类型
year
year:年份,’YYYY’, 4位字符串或者4位数字表示。
以2位字符串表示的year,范围为‘00’到‘99’。
‘00’-‘69’代表2000~2069;
‘70’-‘99’代表1970~1999。
超出取值范围的值将被转换到2000。
以2位数字表示的year,范围为1~99。
00~69代表2000~2069;
70~99代表1970~1999。
create table temp3(y year);
insert into temp3 values(2010),('2010');
insert into temp3 values('94');
insert into temp3 values(98);
select*from temp3;
time
time:时间,’HH:MM:SS’
‘D HH:MM’, ‘D HH’或’SS’:
D表示日,取值范围0~31,插入数据库时,D被转换为小数保存
insert into temp4 values('10:05:05'),('23:23'),('2 10:10'),('3 02'),('10'),('101112'),(111213),('0');
select*from temp4;
date
date:日期,’YYYY-MM-DD’
取值范围为 ‘1000-01-01’~‘9999-12-3’
’YYYYMMDD’用于只需要日期值时,没有时间部分
‘YY-MM-DD’或者‘YYMMDD’,
‘YY’ 取值 ‘00’~‘69’代表2000~2069;
‘70’~‘99’代表1970~1999。
数字格式 YY-MM-DD或者YYMMDD
now():插入当前系统日期
create table temp5(h date);
insert into temp5 values(now());
insert into temp5 values('21-10-6');
datetime
同时包含日期和时间信息的值
‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’
timestamp
‘YYYY-MM-DD HH:MM:SS‘
范围小于datetime
create table temp6(ts timestamp);
insert into temp6 values ('19950101020304'),
('950505060708'),('1996-02-02 02:02:02'),('121212121212'),(now());
select*from temp6;
字符串类型
char(n)
定长字符串,占用n个字符的存储空间,n的最大值是255
varchar(n)
变长字符串,占用的存储空间就是字符串自身占用的存储空间,与n无关
n为可以容纳的最长字符数,范围为0~65535
tinytext、text、mediumtet、longtext
变长字符串,最多容纳字符数为n
Text保存非二进制字符串,如文章内容、评论等。
复合类型
enum枚举
类型的字段只允许从一个集合中取得某一个值,类似于单选按钮的功能
一个enum类型的数据最多可以包含 65535个元素
create database choose charset=gbk;
use choose;
create table enum_db(gender enum('male','female'));
desc enum_db;
insert into enum_db values('male');
insert into enum_db values(1);
insert into enum_db values(2);
select*from enum_db;
set集合
类型的字段允许从一个集合中取得多个值,类似于复选框的功能
一个set类型的数据最多可以包含64个元素
create table set_db(interest SET('go shopping','swim','travel','listen music'));
desc set_db;
这里的set与关键字重复,改成大写防止报错
二进制类型
二进制类型的字段主要用于存储由‘0’和‘1’组成的字符串,是一种特殊格式的字符串。
创建表结构
设置约束
单个字段主键
student_no char(11) primary key
多个字段组合主键
create table nowadays(t1 datetime,t2 timestamp,primary key(t1,t2));
设置非空(not null)约束
create table student(student_name char(10) not null);
设置默认值(default)约束
alter table student add up_limit int default 60;
alter table student add status char(6) default '未';
设置唯一性(unique)约束
alter table student add class_name char(20) not null unique;
或者alter table student add class_name char(20) unique not null;
设置外键(foreign key)约束
alter table student add class_no int not null;
使用constraint 建立主键约束和唯一性约束
create table test(test_no char(10),test_name char(10),constraint test_pk primary key(test_no),
constraint name_unique unique(test_name));
desc test;
设置自增型字段
设置自增型字段(自增性字符通常为主键,否建创建数据表会失败)
create table test_2(test_no char(10),test_name char(10),
test_id int auto_increment primary key);
设置存储引擎和字符集
create table test_3(test_no char(10),test_name char(10),test_id int auto_increment primary key)engine=InnoDB charset=utf8;
show create table test_3;
表结构复制
(法1)create table test_4 like test_3;
(法2)create table test_5 select*from test_3;
表结构修改
删除字段
alter table test_4 drop test_name;
添加新字段
alter table test_4 add test_name char(10);
修改表的字段名(及数据类型)
alter table 表名 change 旧字段名 新字段名 新数据类型
alter table test_4 change test_name test_namee char(5);
仅对字段的数据类型进行修改
alter table 表名 modify 字段名 新数据类
alter table test_4 modify test_name char(10);
设置其他
alter table 表名 engine=新的存储引擎类型
alter table 表名 default charset=新的字符集
alter table 表名 auto_increment=新的初始值
alter table 表名 pack_keys=新的压缩类型
修改表名的语法格式
rename table 旧表名 to 新表名
或者alter table 旧表名 rename 新表名
如果表之间存在外键约束关系,注意删除表的顺序