@xxliixin1993
2016-07-11T16:51:38.000000Z
字数 4308
阅读 1835
database
在一个文件中写入sql语句,例在test文件中写入show databases;
shell> mysql -h 172.16.37.9 -u lx-p < test
Enter password: ********
导入:
1)mysql> USE 数据库名; [数据库要事先存在]
mysql> SOURCE d:/test.sql;
2) [数据库要事先存在]
mysqldump --default-character-set=utf8 -u用户名 -p 数据库名 < 目标文件(如d:\test.sql)
导出:
mysqldump --default-character-set=utf8 -u用户名 -p 数据库名 > 目标文件(如d:\test.sql)
例mysqldump -u root -p tpweb > d:\test.sql
定长 | 变长 |
---|---|
CHAR(#) | VARCHAR(#) |
BINARY(#) | VARBINARY(#) |
类型 | 长度 |
---|---|
bit | 0-1 |
int | -2^31-2^31-1(4个字节) |
bigint | -2^63-2^63-1(8个字节) |
float | 小数 例float(3) 三位小数 |
numeric | 小数 例numeric(20,2)20表示小数加整数一共20位,2表示小数为2位 |
date
time
datetime
year(2)
year(4)
UNSIGNED | 无符号 |
---|---|
NULL | 可以为空 |
NOT NULL | 不能为空 |
DEFAULT | 认为,例default 'man' 表示如果不填,默认为man |
AUTO_INCREMENT | 整数专用的修饰符 自增长 |
PRIMARY KEY | 主键 |
UNIQUE KEY | 唯一键 |
FOREIGN KEY | 外键(外键只能指向主键,且和主键的类型一致) |
例:
/*创建dept表*/
create table dept(
deptno int primary key,
dname varchar(30),
local varchar(30))
--创建emp表
create table emp(
empno int primary key,
ename varchar(30),
deptno int foreign key references dept(deptno) --创建外键关联dept表的主键
)
mysql>
可运行的命令有两类:
客户端命令:在mysql客户端本地直接运行的命令
获取完整列表:
mysql> help
服务器端命令:由客户端将命令通过协议封闭成报文发往mysqld,由mysqld运行,并取回运行结果至客户端;
即SQL语句,这些语句必须有语句结束符,默认为;
客户端命令:
quit, \q:退出
help, \h:帮助
clear, \c: 中止正在编写的语句;类似bash中的Ctrl+c的功能;
go, \g: 语句结束符
ego, \G: 语句结束符,但竖排显示每行数据;
delimter, \d: 定义语句结束符;
use, \u: 设定要操作默认数据库;
SQL语句可以通过help COMMAND获得帮助
例:help create user;
创建数据库
CREATE DATABASE 数据库名
create database mydata
查看已有的数据库列表:
SHOW DATABASES;
查看某库创建时使用的语句:
SHOW CREATE DATABASE db_name;
查看MySQL支持的所有字符集:
SHOW CHARACTER SET;
查看MySQL支持的所有Collate:
SHOW COLLATION;
删除数据库
DROP DATABASE 数据库名
表管理操作:
查看表结构
desc 数据库名.表名;
例:desc mysql.user;
建表要求
约束
查看数据库的表:
SHOW [FULL] TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
LIKE用于作模糊匹配,支持通配符:
_: 匹配任意单个字符;
%: 匹配任意长度的任意字符;
例如: show create table test_table_name;
删除表:DROP TABLE
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
alter table customer_data add status tinyint(2) not null default 2
alter table tablename auto_increment=1
table_name
ADD PRIMARY KEY ( column
) table_name
ADD UNIQUE (column
) table_name
ADD key( column
)ALTER TABLE cms_ban ADD key(expire)
表选项:
ENGINE = engine_name 存储引擎
注意:MySQL支持插件存储引擎
查看支持的所有存储引擎
SHOW ENGINES;
存储引擎:表类型 创建每个表时,都可以单独指明其表类型;但,建议同一个库内的所有表,应该使用同一种类型;
例如engine=InnoDB
查看表上的索引:
SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr]
例如:SHOW INDEXES FROM mydb.teachers;
索引管理:
创建索引:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON tbl_name (index_col_name,...)
删除索引:
DROP INDEX index_name ON tbl_name
WHERE后的条件表达式
>, <, >=, <=, ==, !=
BETWEEN ... AND ...
LIKE 'pattern'
_ 表示任意单个字符。匹配单个任意字符
% 表示任意个或多个字符。可匹配任意类型和长度的字符。
如果我就真的要查%或者_,怎么办呢?使用escape,转义字符后面的%或_就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用
RLIKE 'pattern' 使用正则表达式做匹配;
组合条件:
AND
OR
NOT
<div class="md-section-divider"></div>
mysql> explain select Newcode from caiji_dong_info_bj where dongname like '%玉泉西里二区%' ;
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | caiji_dong_info_bj | index | NULL | Newcode_dongname | 164 | NULL | 71625 | Using where; Using index |
解释:
虽然一般情况下like用索引的情况是玉泉西里二区%
但是当你所有所需数据都在一个索引(id无所谓)中还是会用到索引的。
原因:
一个包含查询所需的字段的索引称为 covering index 覆盖索引。MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提供效率。