@xxliixin1993
2016-07-11T08:51:38.000000Z
字数 4308
阅读 2048
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' 使用正则表达式做匹配;组合条件:ANDORNOT<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,提供效率。