mysql基础

/**部分地区database应该改成table,因不小心替换了emmmmm,读者自行辨认**/
database 数据库
table 表
schema 模式(有时是数据库的同义词)
column 列
datatype 数据类型
row 行
primary key 主键(每一行都应该有自己的唯一标识),主键类不允许Null值,不能存在相同的值


\g和; help和\h quit和exit 同义词


show databases 列出全部数据库
show tables 列出全部数据表
use <database> 选择数据库
show columns from <table> desc||describe<table> 返回表的信息
show status 显示广泛服务器状态信息
show create database show create table 分别用来显示创建特定数据库或者表的Mysql
show grants 用来显示授予用户的安全权限
show errors show warnings 用来显示服务器错误或警告消息
help <show> 显示允许的<show>(可为其他关键词)语句
select * from <database> 检索所有列
select * from <database> limit 5 检索的列数限制在5行(从0开始)
select * from <database> limit 5,6 检索的列数为从第五行开始的6行
select <column name> from <database> 检索单个列,可检索多个列,用逗号隔开,不区分先后
select distinct <column name> from <database> 去除相同的产品,多个列时,指定的多列都不同,否则显示
select <database>.<column name> from <database> 检索单个列,完全限定表名
select *, count(distinct <column name>) 
from <database> group by <column name> 检索单个列,全部列表,会多出一列
select <column name> from <database> 
order by <column name> 排序查询(可进行多列排序查询)默认升序


select <column name> from <database> 
order by <column name> desc 降序查询(放在列名之后)desc降序asc升序
select * from <database> where <column name>='<value>' 条件查询(和order by混用时位于where之后)
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
between 在指定值之间(between 5 and 10)
is null 判断是否为空
and 和
or 或者
in 指定条件范围
not 否定


select <column name> from <database> where <column name> like 'jet%';
% 任何字符出现的任意次数
_ 任意字符出现一次
regexp 正则表达式(支持所有正则表达式叙述)
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表
\\\ 匹配\
[0-9] 匹配全部数字
[a-z] 匹配全部字母
[:alnum:] 任意字母和数字[a-zA-Z0-9]
[:alpha:] 任意字符[a-zA-Z]
[:blank:] 空格和制表[\\t]
[:cntrl:] ASCLL控制字符(0-31|127)
[:digit:] 任意数字[0-9]
[:graph:] 与[:print:]相同,但不包含空格
[:print:] 任意打印字符
[:lower:] 任意小写字母[a-z]
[:punct:] 不在[a-zA-Z0-9]和ASCLL控制字符中的任意字符
[:space:] 包括空格在内的任意空白字符[\\f\\n\\r\\t\\v]
[:upper:] 任意大写字母[A-Z]
[:xdigit:] 任意十六进制数字[a-fA-F0-9]
* 0或者多个匹配
+ 1或者多个匹配
? 0或1个匹配
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾


拼接(concatenate)
select Concat(<column name>,'(',<column name>,')') from <database>;
删除右侧多余的空格,再进行拼接 RTrim()去除右侧空格    LTrim()右侧    Trim()左右两侧
select Concat(RTrim(<column name>),'(',RTrim(<column name>),')') from <database>;
拼接后赋予别名
select Concat(<column name>,'(',<column name>,')') AS <newname> from <database>;
算数计算以后新生列
select <column name>,<column name>,<column name>+<column name> AS <column newname> from <database>;
<column name> <column name> <column newname> 支持'+'、'-'、'*'、'/'计算
1 2 3
查询当前时间
select now();
now();插入使用
常用的文本处理函数
Upper() 将文本转换为大写
Left() 返回串左边的字符
Right() 返回串右边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
Soundex() 返回串的SOUNDEX值发音类似'Y'的列
SubString() 返回子串的字符


常用日期和时间处理的函数
AddDate() 增加一个日期
AddTime() 增加一个时间
CurDate() 返回当前日期
Date() 返回当前时间
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Data_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个时间的月份部分
Now() 返回当前时间和日期
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分


常用值处理函数
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切


SQL聚焦函数
AVG() 返回某列的平均值
Count() 返回某列的行数
Max() 返回某列的最大值
Min() 返回某列的最小值
Sum() 返回某列值的和




分组查询:group by 在where之后
mysql> select zh,count(*) as sj from lai group by zh;
+-------+----+
| zh    | sj |
+-------+----+
| a1234 |  4 |
| rrrr  |  1 |
| hhhh  |  1 |
| null  |  4 |
+-------+----+
2 rows in set (0.00 sec)
having支持所有where操作,分组后过滤
mysql> select zh,count(*) as sj from lai group by zh having sj>=2;
+-------+----+
| zh    | sj |
+-------+----+
| a1234 |  4 |
| null  |  4 |
+-------+----+
2 rows in set (0.00 sec)


select子句顺序
子句 说明 是否必须使用
select 要返回的列或者表达式 是
from 从中检索数据的表 仅在从表选择数据时使用
where 行级过滤 否
group by 分组说明 仅在按组计算聚集时使用
having 组集过滤 否
order by 输出排序顺序 否
limit 要检索的行数 否


子查询:
select <column name> from <database> where <column name>='a';
+-------------+
|<column name>|
+-------------+
| a1234       |
| aall        |
+-------------+
select <column name2> from <database2> where in (a1234,aall)
+-------------+
|<column name2>|
+-------------+
| xxxxx       |
| xxxx        |
+-------------+


合并后的子查询:从内向外处理
select <column name2> from <database2> where in 
(select <column name> from <database> where <column name>='a');




创建联结:a表中主键,成为b表中外键,通过他们值相等来查询关联表信息
联结两个表
select lyb.name,yhxx.name from yhxx,lyb where yhxx.id=lyb.id;
联结多个表
select lyb.name,yhxx.name from yhxx,lyb where yhxx.id=lyb.id and yhxx.name=lyb.name;


内部联结:inner join <table> on
select lyb.name,yhxx.name from yhxx inner join lyb on yhxx.id=lyb.id;


外部联结:(左边的表显示全部信息,反之right为右边的表显示全部信息,没有则全部显示)left outer join <table> on 
select lyb.name,yhxx.name from lyb left outer join yhxx on yhxx.id=lyb.id and yhxx.name=lyb.name;


使用别名:缩短sql语句 允许在单条select语句中多次使用相同的表  自联结
select lyb.name,yhxx.name from yhxx as a,lyb as b where a.id=b.id and a.name=b.name;
select a.name,b.name from yhxx as a,yhxx as b where a.id=b.id and a.name='xxx';




组合查询:union(两条或者两条以上的select语句组成,且自动删除重复行,(union all)可显示重复的行)
select <column name>,<column name1>,<column name2> from <database> where <column name> <= 5
union
select <column name>,<column name1>,<column name2> from <database> where <column name1> in (1001,1002);


组合查询中(order by)排序只能放在最后面的语句上
select <column name>,<column name1>,<column name2> from <database> where <column name> <= 5
union
select <column name>,<column name1>,<column name2> from <database> where <column name1> in (1001,1002)
order by <column name>,<column name1>;




启用全文搜索支持:fulltext()标记支持索引搜索
create table <table name>(
note int auto_increment, //自动增长
prod char(10),
note_text text,
primary key(note), //添加主键
fulltext(note_text) //添加索引单个列,自动删除增加和更新时,索引也会随之更新
);


进行全文搜索:Match()对指定的列搜索,Against()对指定的文本进行搜索
select note_text from <table name> where Match(note_text) Against('需要搜索的表达式');


查询拓展:增加with query expansion 会将查询到的内容中所有的内容当作关键词,再查询一次。
select note_text from <table name> where Match(note_text) Against('需要搜索的表达式' with query expansion);


布尔文本搜索:in boolean mode 会查询不含有关键词的行数内容
select note_text from <table name> where Match(note_text) Against('需要搜索的表达式' in boolean mode);
+ 包含,必须出现
- 排除,词不出现
> 包含,而且增加等级值
< 包含,而且减少等级值
() 把词组成子表达式
~ 取消一个词的排序值
* 词尾的通配符
"" 定义一个短语


插入单行或多行数据数据:
insert into <table name> values(null,'纯净的山泉','123456',110,'1.jpg','男');||
(null,'月亮之上','123456',120,'2.jpg','女'),
(null,'流年似水','123456',119,'3.jpg','女'),
(null,'傻子的幸福','123456',112,'4.jpg','女');


插入多行更安全的方式:
insert into <table name>(id,name,pass,phone,photo,sex)values(
(null,'纯净的山泉','123456',110,'1.jpg','男');
);


插入检索出的数据:检索的表内容可多可少,都可插入
insert into <table name>(id,name,pass,phone,photo,sex)
select id,name,pass,phone,photo,sex from <new table>


更新数据:
updata <table name> set 更改的列名='更改的内容' where key='主键位置';
更新多个内容时
updata <table name> set 更改的列名='更改的内容',更改的列名='更改的内容' where key='主键位置';


删除数据:注意,如果省略了where,将删除整个表中全部内容,不删除表本身
delete from <table name> where key='主键位置';


删除表中全部行:速度更快  原理:删除原来的表,并生成新表
truncate <table name>


创建表:如果创建时想看表名是否存在,在表名后加上not exists;没有才创建
create table <table name>(
id int not null auto_increment,
name char(20) not null,
city char(20) null
);


创建表时利用复合主键:
create table <table name>(
id int not null auto_increment, //自动增长
name char(20) not null default '好', //设置默认值
city char(20) null,
primary key (id,name)
);


引擎类型:默认下MyISAM,注意,外键不可跨引擎
create table <table name>(
id int not null auto_increment, //自动增长
name char(20) not null default '好', //设置默认值
city char(20) null,
primary key (id,name)
)ENGING=InnoDB;
InnoDB:可靠的事务处理引擎,不支持全文搜索
MEMORY:功能上等于MyISAM,但由于数据储存在内存中,速度很快,适合临时表
MyISAM:性能极高,支持全文搜索,但不支持事务处理


更新表:更改表的结构
alter table <table name>
add name char(20);


更改Mysql 表字段为unique
alter table user add unique key(phone);


更改数据类型
alter table article modify remark varchar(18000);


改成新的名称和数据类型
alter table article modify remark newremark varchar(1800);


迁移表
insert INTO puer.tool(id,bh,ip,text,data) (SELECT t_id,t_bh,t_ip,t_text,t_data FROM pu.txt);


删除列:
alter table <table name>
drop column name;


删除表:
drop table <table name>


更改名称:rename table <oldname> to <newname>
mysql> rename table lai to xmtd;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from lai;
ERROR 1146 (42S02): Table 'lai.lai' doesn't exist
mysql> select * from xmtd;
Empty set (0.00 sec)




使用视图: 主要用于解决复杂的联结,解决复杂的SQL操作,保护数据,更改数据格式和表示
create view <view name> //创建视图
show create view <view name> //查看创建视图的语句
drop view <view name> //删除视图
drop view <view name> create view <view name> //更新视图先删后创建
create view <view name> //更新视图,强制替换原有视图


视图解决复杂的联结:
create view <view name> as select <table1>,<table2>,<table3> where 
<table1>.id=<table2>.id and <table2>=<table3>;
select <table1>,<table2> from <view name> where <table3>name='TNT2';


正常情况下: 如果大量使用,造成极大的不方便
select Concat(name,country) as title from <table> order by name;


利用视图后:
create view <view name> AS 
select Concat(name,country) as title from <table> order by name;
select * from <view name>






储存过程:
delimiter // //告诉命令行使用'//'做分隔符
create procedure ccname(储存名)() //利用create procedure创建储存过程
begin //开始语句
select avg(id) as age(列名) //执行语句
from <table name>;
end // //结束语句
delimiter ; //恢复原来的分隔符


调用过程:
call ccname(储存名)();
+-------------+
|age       |
+-------------+
|16.133517    |
+-------------+


删除储存过程:
drop procedure ccname(储存名,这次不用括号)


存在变量的时候,储存过程:
create procedure ccname(储存名)( //利用create procedure创建储存过程
out x decimal(8,2), //创建左右最大允许8位数,小数点右边两位的高精度
out y decimal(8,2), //out指出相应参数用来储存过程中传出的值
out z decimal(8,2) //三个用于传出的参数
)
begin
select Min(<列名>)
into x from <tablename>; //利用SQL查询最小值赋予给x
select Max(<列名>) //into保存到相应的变量
into y from <tablename>; //利用SQL查询最大值赋予给y
select Avg(<列名>)
into z from <tablename>; //利用SQL查询平均值赋予给z
end;




调用过程:
call ccname(@a,@b,@c); //所有的mysql变量都必须以@开始


没有任何返回值


查询过程:
select @a,@b,@c; //可以单独查询,但查询的应该用abc,而不是调用
+-----------------------+ //xyz查询
|@a @b @c      |
+-----------------------+
|55   22    44 |
+-----------------------+


-- 储存过程中的注释,主要应对大量数据时
in 传入储存过程
out 从储存过程传出
inout 传入传出的参数
into 检索值保存到相应变量


show create procedure ccname(储存名称); //查询单个储存过程
show procedure status; //查询全部储存过程




游标:(只能用于储存过程)


创建游标:
create procedure 储存名()
begin
declare 游标名称 cursor //定义游标
for
select 列名 from 表名;
end;


例子:
create procedure 储存名()
begin
--默认值为false
declare done boolean default 0;
declare o int;
declare t decimal(8,2);
--定义三个变量
declare 游标名 cursor
--创建游标
for
select 列名 from 表名;
--查询列
declare continue handler for sqlstate '条件' set done=1;
--直到列中出现条件,就将done设置为true

create table if not exists 表名(num int,total decimal(8,2));
--如果不存在表,则创建此表

open 游标名;
--打开上述创建的游标


repeat
fetch 游标名 into o;
--直到循环体,将检索到的内容添加到o变量中
call 储存过程名(o,1,t);
--该储存过程仅仅返回一个t参数,传入两个参数,返回t;

insert into 新创建的表名(num,total)values(o,t);
--插入多行至新表


until done end repeat;
--知道done为true时,循环结束


close 游标名;
--关闭游标
end;


open 游标名; //打开游标
close 游标名; //关闭游标
fetch 游标名 into o //检索当前行的列到一个含有o的局部变量中
REPEAT 内容 UNTIL boolean END REPEAT //直到型循环,其中boolean为真,则循环完毕






触发器:(delete、insert、update,可在这三个过程运行,after before,可在这两个过程执行,每张表最多六个触发器)
create trigger 触发器名 after insert on 表名 for each row select '显示的文本';
--创建(create trigger)一个触发器,在插入(insert)每行(for each row)之后(after)执行


create trigger 触发器名 before delete on 表名 for each row
begin
insert into 档案表名(插入的列,...)
values(OLD.删除的列,OLD.删除的列...);
end;
--删除行时执行,将删除的行参数添加到档案表中,引用OLD的虚拟表访问被删除的行(更新同理,写在之后)


drop trigger 触发器名称;
--删除触发器






事务处理:(MyISAM(默认)引擎不支持)用于批量处理时出错,可撤回出错前的处理,回退操作
transaction 事务
rollback 回退,撤销指定SQL语句(仅仅适用于insert、update、delete语句)
commit 提交
savepoint 保留点,事务处理中设置的临时占位符(可对它发布回退)


start transaction 开始事务


mysql> start transaction; 开启事务
Query OK, 0 rows affected (0.00 sec)


mysql> select * from cs; 查询
+------+
| i    |
+------+
| w    |
| w    |
+------+
2 rows in set (0.00 sec)


mysql> delete from cs; 删除
Query OK, 2 rows affected (0.00 sec)


mysql> select * from cs; 查询
Empty set (0.00 sec)


mysql> rollback; 回滚
Query OK, 0 rows affected (0.00 sec)


mysql> select * from cs; 查询
+------+
| i    |
+------+
| w    |
| w    |
+------+
2 rows in set (0.00 sec) rollback必须在事务里运行,不然无效


在事务处理块中,提交不会隐含的进行,需要使用commit;
set autocommit=0; 设置自动提交为假,即不自动提交,反之1即为真
savepoint 保留点 设置保留点
rollback to 保留点 退回至保留点






字符集:
show collation //查看所支持校队的完整列表
show character set //显示所有可用的字符集以及描述和默认校对
show variables like 'character%'; //MySQL服务器范围编码
show variables like 'collation%'; //MySQL数据库范围编码


create table lai( //创建表时设置字符编码和排序编码
id int,
name varchar(20) character set utf8 collate gbk
)default character set utf8 collate gbk; //默认字符集,备用的校对顺序


一、检查当前数据库编码。
使用语句:
show variables like '%character%';
show variables like '%collation%';


二、将mysql编码设置为utf-8。具体步骤如下:
如果安装mysql时安装了“MySql Sever Instance Configuration Wizard”,则只需要启动该程序进行相应设置即可。


如果没有该程序,需要手动修改mysql编码。


1、  编辑MySql的配置文件
MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是 /etc/my.cnf
--在 [mysqld] 标签下加上以下内容:
default-character-set = utf8
character_set_server = utf8
注意:如果此标签下已经存在“default-character-set=GBK”类似的内容,只需修改即可。
--在 [mysql]  标签下加上一行
default-character-set = utf8
--在 [mysql.server]标签下加上一行
default-character-set = utf8
--在 [mysqld_safe]标签下加上一行
default-character-set = utf8
--在 [client]标签下加上一行
default-character-set = utf8


2、  重新启动MySql服务
Windows可在服务管理器中操作,也可使用命令行:
net stop mysql 回车
net start mysql 回车
服务名可能不一定为mysql,请按自己的设置
linux下面可是用 service mysql restart
如果出现启动失败,请检查配置文件有没有设置错误


3、  查看设置结果
登录MySql命令行客户端:打开命令行
mysql –uroot –p 回车
输入密码
进入mysql后 执行 :show variables like "%character%";
显示结果应该类似如下:
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |


如果仍有编码不是utf8的,请检查配置文件,也可使用mysql命令设置:
set character_set_client = utf8;
set character_set_server = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set collation_connection = utf8_general_ci;
set collation_database = utf8_general_ci;
set collation_server = utf8_general_ci;


控制台为utf8肯定导致无法输入中文,故用gb2312;
set names gb2312;


建立数据库时可以使用以下命令:
create database app_relation character set utf8; 
use app_relation;
source app_relation.sql;
修改数据库编码的命令为:
alter database app_relation character set utf8; 
ALTER TABLE `lai` DEFAULT CHARACTER SET utf8;该命令用于将表lai的编码方式改为utf8; 
后台下修改密码:mysqladmin -u root -p password "root"
修改字段的编码方式:ALTER TABLE `lai` CHANGE `ly` `ly` VARCHAR(200) CHARACTER SET utf8 NOT NULL; 该命令用于将表test中name字段的编码方式改为utf8






安全管理:
mysql> use mysql;
Database changed
mysql> select user from user; //查询所有账号列表
+--------+
| user   |
+--------+
| server |
| root   |
+--------+
2 rows in set (0.02 sec)


create user 账号 identified by '密码'; //创建新用户
rename user 账号 to 新账号; //更改名称
drop user 账号; //删除账号
set password for 账号=password('new password'); //更改密码
show grants for 账号; //查看用户权限
mysql> show grants for server; //其中, GRANT USAGE ON *.*表示:在任何数据库,任何表上没有权限
+-------------------------------------------------------------------------------
------------------------+
| Grants for server@%
                        |
+-------------------------------------------------------------------------------
------------------------+
| GRANT USAGE ON *.* TO 'server'@'%' IDENTIFIED BY PASSWORD '*866D5A029D62EC05AC
C4584CE50F1CD2F50E0E82' |
+-------------------------------------------------------------------------------
------------------------+
1 row in set (0.00 sec)


grant select on 数据库.* to 用户名; //给予用户在此数据库上进行查询权限
revoke select on 数据库.* to 用户名; //撤销特定权限
GRANT 和 REVOKE可在几个层次上控制访问权限:
整个服务器:GRANT ALL和 REVOKE ALL;
整个数据库:ON database.*;
特定的表:ON database.table;
特定的列:
特定的存储过程:


权限 说明
all 除了GRANT OPTION外所有权限
alter 使用ALTER TABLE
alter routine 使用ALTER PROCEDURE和DROP PROCEDURE
create 使用CREATE TABLE
create routine 使用CREATE PROCEDURE
create tmeporary tables 使用CREATE TEMPORARY TABLE
create user 使用CREATE USER、DROP USER、RENAME USER、REVOKE ALL PRIVILEGES
create view 使用CREATE VIEW
delete 使用DELETE
drop 使用DROP TABLE
execute 使用CALL和储存过程
file 使用SELECT INTO OUTFILE和LOAD DATA INFILE
grant option 使用grant和revoke
index 使用CREATE INDEX和DROP INDEX
insert 使用INSERT
lock tables 使用LOCK TABLES
process 使用SHOW FULL PROCESSLIST
reload 使用FLUSH
replication client 服务器位置的访问
replication slave 由复制从属使用
select 使用SELECT
show databases 使用SHOW DATABASES
show view 使用SHOW CREATE VIEW
shutdown 使用mysqladmin shutdown(关闭Mysql)
super 使用CHANGE MASTER、KILL、LOGS、PURGE、MASTER、SET GLOBAL,还允许mysqladmin调试登陆
update 使用UPDATE
usage 无访问权限






备份数据库:
方案一:使用mysqldump转储所有数据库内容到某个外部文件
CMD中:
mysqldump -u root -p pu txt >d:\txt.sql 导出表
mysqldump -u root -p test >d:\test.sql
Enter password: **** 导出数据库
mysqldump -u root -p --databases lai test ..>d:a.sql 导出多个数据库
mysqldump -u root -p --all-databases >d:a.sql 导出所有数据库
select * from table into outfile 'd:a.txt'; 导出到记事本
mysql -u root -p root -e'select* from tablename' database>d:a.txt同上


格式更改
fields terminated by '\、'
optionally enclosed by '\"'
lines starting by '\>'
terminated by '\r\n';


mysqldump -u root -p root -T d:\ database a 导入a.txt到数据库
mysqldump -u root -p lai <a.sql 导入数据库
source 相对路径,导入数据库


方案二:使用mysqlhotcopy从数据库复制所有数据(并非适用于全部引擎)
方案三:使用mysql的BACKUP TABLE或SELECT INTO OUTFILE转储所有数据到某个外部文件,
系统文件名必须不存在,数据库可使用restore table来复原
flush tables; 刷新未写数据
analyze table <table name> 检查表键是否正确
check table <table name> 发现和修复表的问题
repair table 修复以上无法修复的表
optimize table 收回删除大量数据的所用的空间
--help 显示帮助
--safe-mode 装载减去某些最佳的服务器
--version 显示版本信息然后退出
--verbose 显示全文消息




附一、数值数据类型
char(n) 1~255个字符长度,不设定长度,默认为1
enum 接受最多64K个串组成的一个预定集合的某个串
longtext 与text相同,最大支持4GB
mediumtext 与text相同,最大支持16k
set 接受最多64个串组成的预定集合
text 最大长度64k的变长文本
tinytext 最大长度为255字节
varchar(n) 最多255个,n<=255
bit 1~64位
bigint 整数值
boolean||bool 布尔值
decimal||dec 精度可变的浮点数
double 双精度浮点数
float 单精度浮点数
int||integer 整数值,比bigint范围小
mediumint 整数值,比int范围小
real 4字节的浮点数
smallint -32768~32767之间整数值
tinyint -128~127之间的整数


附二、日期和时间数据类型
date 表示1000-01-01~9999-12-31的日期
datetime DATE和TIME的组合
timestamp 和datetime相同范围较小
time 格式为HH:MM:SS
year 用2位数表示年数17


附三、二进制数据类型
blob 最大长度为64KB
mediumblob 最大长度为16MB
longblob 最大长度为4G
tinyblob 最大长度为255字节


附四、
1、创建一个主键约束的表
show databases;
create database wudi;
use wudi;
create table laige(
id int primary key, //primary key主键约束||CONSTRAINT pk_name_pass PRIMARY KEY (name,pass)联合主键
name varchar(20),
pass varchar(20)
);
desc laige;
2、创建一个非空约束的表
create database wudi1;
use wudi1;
create table laige(
id int primary key,
name varchar(20) not null //not null非空
);
desc laige;
3、创建一个默认约束的表
create database wudi2;
use wudi2;
create table laige(
id int primary key,
name varchar(20) default 'xxx' //default 'xxx'默认约束
);
desc laige;
4、创建一个唯一约束的表
create database wudi3;
use wudi3;
create table laige(
id int primary key,
name varchar(20) unique //unique唯一约束
);


alter table lai add constraint FK_22 unique(dh);//改变一个属性为不可重复 唯一约束


desc laige;
5、创建一个自动增长的表
create database wudi4;
use wudi4;
create table laige(
id int primary key auto_increment, //auto_increment自动增长
name varchar(20)
);
desc laige;
6、创建一个带外键的表
部门表:id、部门name、city
create table dept(
d_id int auto_increment primary key,
d_name varchar(200),
d_loc varchar(200)
);


员工表:id、员工name、工作、外键
create table sb(
e_id int auto_increment,
e_name varchar(50),
e_job varchar(50),
emp_dept int,
primary key (e_id),
constraint fk_s foreign key(emp_dept) references dept (d_id) //其中fk_s是外键名称、emp_dept行名称、dept(d_id)别人的主键
);
create table sb(
e_id int auto_increment,
e_name varchar(50),
e_job varchar(50),
emp_dept int,
primary key (e_id),
foreign key(emp_dept) references dept (d_id) //无需名称的外键
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值