SQL语句-数据库
登录:
mysql -uroot -p查看当前所有的数据库:
show databases;-
创建数据库:
create database 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;create database day25db; create database day25db DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 删除数据库:
drop database 数据库名;进入数据库:
use 数据库名;
SQL语句-数据表
进入数据库
use 数据库;,查看当前所有表:show tables;创建表结构
create table 表名(
列名 类型,
列名 类型,
列名 类型
)default charset=utf8;
示例:(-- 是SQL语句的注释)
create table tb5(
id int not null auto_increment primary key, -- 不允许为空 & 主键 & 自增
name varchar(16) not null, -- 不允许为空
email varchar(32) null, -- 允许为空(默认)
age int default 3 -- 插入数据时,如果不给age列设置值,默认值:3
)default charset=utf8;
注意:一个表中只能有一个自增列【自增列,一般都是主键】。
删除表
drop table 表名;清空表
delete from 表名;或truncate table 表名;(速度快、无法回滚撤销等)
- 当您不再需要该表时,使用 DROP TABLE;
- 当您仍要保留该表,只是想删除所有记录时,使用 TRUNCATE TABLE;
- 当你要删除部分记录时,使用带有 WHERE 子句的 DELETE FROM。-
修改表
-
添加列
alter table 表名 add 列名 类型; alter table 表名 add 列名 类型 DEFAULT 默认值; alter table 表名 add 列名 类型 not null default 默认值; alter table 表名 add 列名 类型 not null primary key auto_increment; -
删除列
alter table 表名 drop column 列名; -
修改列类型
alter table 表名 modify column 列名 类型; -
修改列 类型 + 名称
alter table 表名 change 原列名 新列名 新类型;alter table tb change id nid int not null; alter table tb change id id int not null default 5; alter table tb change id id int not null primary key auto_increment; alter table tb change id id int; -- 允许为空,删除默认值,删除自增。 -
修改列 默认值
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 新默认值; -
删除列 默认值
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT; -
添加主键
alter table 表名 add primary key(列名); -
删除主键
alter table 表名 drop primary key;
-
-
常见列类型
create table 表( id int, name varchar(16) )default charset=utf8;int[(m)][unsigned][zerofill]
int 表示有符号,取值范围:-2147483648 ~ 2147483647
int unsigned 表示无符号,取值范围:0 ~ 4294967295
int(5)zerofill 仅用于显示,当不满足5位时,按照左边补0,例如:00002;满足时,正常显示。
m 数值宽度
m为显示宽度,如类型为int(5)的字段,存入数据5, 则数据库中显示0005;若存入 在存储范围内且比显示宽度大的数,如123456,则按正常显示为123456
-
tinyint[(m)] [unsigned] [zerofill]有符号,取值范围:-128 ~ 127. 无符号,取值范围:0 ~ 255 -
bigint[(m)][unsigned][zerofill]有符号,取值范围:-9223372036854775808 ~ 9223372036854775807 无符号,取值范围:0 ~ 18446744073709551615 decimal[(m[,d])] [unsigned] [zerofill]
准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
例如:
create table L2(
id int not null primary key auto_increment,
salary decimal(8,2)
)default charset=utf8;
-
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]单精度浮点数,非准确小数值,m是数字总个数,d是小数点后个数。小数点后个数超过会自动四舍五入 -
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。 char(m)定长字符串,m代表字符串的长度,最多可容纳255个字符。 定长的体现:即使内容长度小于m,也会占用m长度。例如:char(5),数据是:yes,底层也会占用5个字符;如果超出m长度限制(默认MySQL是严格模式,所以会报错)。 如果在配置文件中加入如下配置, sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 保存并重启,此时MySQL则是非严格模式,此时超过长度则自动截断(不报错)。。 注意:默认底层存储是固定的长度(不够则用空格补齐),但是查询数据时,会自动将空白去除。 如果想要保留空白,在sql-mode中加入 PAD_CHAR_TO_FULL_LENGTH 即可。 查看模式sql-mode,执行命令:show variables like 'sql_mode'; 一般适用于:固定长度的内容。 create table L3( id int not null primary key auto_increment, name varchar(5), depart char(3) )default charset=utf8; insert into L3(name,depart) values("alexsb","sbalex");varchar(m)
变长字符串,m代表字符串的长度,最多可容纳65535个字节。
变长的体现:内容小于m时,会按照真实数据长度存储;如果超出m长度限制((默认MySQL是严格模式,所以会报错)。
如果在配置文件中加入如下配置,
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
保存并重启,此时MySQL则是非严格模式,此时超过长度则自动截断(不报错)。
例如:
create table L3(
id int not null primary key auto_increment,
name varchar(5),
depart char(3)
)default charset=utf8;
-
texttext数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。 一般情况下,长文本会用text类型。例如:文章、新闻等。create table L4( id int not null primary key auto_increment, title varchar(128), content text )default charset=utf8; -
mediumtextA TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters. -
longtextA TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1)
-
datetimeYYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59) timestamp
YYYY-MM-DD HH:MM:SS(1970-01-01 00:00:00/2037年)
对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储,查询时,将其又转化为客户端当前时区进行返回。
对于DATETIME,不做任何改变,原样输入和输出。
date
YYYY-MM-DD(1000-01-01/9999-12-31)
time
HH:MM:SS('-838:59:59'/'838:59:59')
MySQL还有很多其他的数据类型,例如:set、enum、TinyBlob、Blob、MediumBlob、LongBlob 等,详细见官方文档:https://dev.mysql.com/doc/refman/5.7/en/data-types.html