mysql一些常用指令

mysql的配置文件,在linux与osx中为my.cnf文件,其中mysql、client都是客户端的,mysqld表示下面的内容属于服务器端;windows中配置文件为my.ini,其它相同

设置编码方式为utf-8:

在client下添加default-character-set=utf8 

在mysqld下添加character-set-server=utf8 与 init_connect='SET NAMES utf8'

其他的一些参数请自行查找,暂且略过

因为在客户端执行sql语句时经常会出现一些错误代码,这时候可以使用perror xxx,来输出详细信息。

比如:

mysql> perror 1064;

从文本文件执行sql语句:

比如有一个文本文件,路径为~/sql.txt (或xxx.sql)

可以这样执行:

bash> mysql < ~/sql.txt

如果正在运行mysql,可以使用如下使用:

mysql> source ~/sql.txt
mysql> \. ~/sql.txt

查看数据库存储引擎:

mysql> show engines;

 MyISAM:不支持事务,该引擎的表存储为3个文件,其文件名称与表名相同,但后缀分别以 .myd、.myi、.frm结尾,其中,以.myd为后缀名的文件存储数据、以.myi为后缀名的文件存储索引、以.frm为后缀的文件存储表的结构;插入数据快,主要用于插入新记录和读出记录。

MEMORY:使用hash索引,所有数据存储在内存中,处理速度快但不安全,适合用于存储临时数据的临时表;这类数据库只适用于相对较小的数据库表。

InnoDB:提供了良好的事务管理、崩溃修复能力和并发控制、支持外键。缺点在于读写效率稍差、占用的数据空间相对较大;如果对事务的完整性要求较高,需要频繁的进行更新和删除操作,那么可以选择InnoDB,因为该存储引擎可以实现事务的提交和回滚。InnoDB为mysql默认存储引擎

创建数据库:

mysql> CREATE DATABASE IF NOT EXISTS newdb;

 查看数据库:

mysql> SHOW CREATE DATABASE newdb;

使用数据库:

mysql> USE newdb;

删除数据库:

mysql> DROP DATABASE IF EXISTS newdb;

创建数据库表:

mysql> CREATE TABLE newtable(field1 type restraint, field2 type restraint,...);

 查看表结构:

mysql> DESCRIBE newtable;
mysql> DESC newtable;

 查看表的详细结构:

mysql> SHOW CREATE TABLE newtable;

 添加表数据:

mysql> INSERT INTO newtable(field1,field2,...) 
                   VALUES(data1,data2,...),(data1,data2,...);

查看表数据:

mysql> SELECT * FROM newtable;

删除表数据:

mysql> DELETE FROM newtable; 没有WHERE进行控制则清空该表

修改表名:

mysql> ALTER TABLE newtable RENAME new_newtable;

字段类型修改:

mysql> ALTER TABLE <表名> MODIFY <字段名> <数据类型>;
mysql> ALTER TABLE new_newtable MODIFY field1 INT;

添加字段:

mysql> ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] [FIRST|AFTER 已存在字段名];
mysql> ALTER TABLE new_newtable ADD newfield INT FIRST;

字段位置修改:

mysql> ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;
mysql> ALTER TABLE new_newtable MODIFY newfield INT AFTER field1;

删除字段:

mysql> ALTER TABLE <表名> DROP <字段名>;
mysql> ALTER TABLE new_newtable DROP newfield;

删除表:

mysql> DROP TABLE new_newtable;

主键:

是表的标志列,在mysql中支持主键组的使用,主键对用户通常没有意义。

唯一地标志一行数据、作为一个可以被外键引用的有效对象。

创建表时添加主键:

mysql> CREATE TABLE table1(
id INT,
name VARCHAR(30),
tid INT,
PRIMARY KEY(id)
); 

无主键时添加主键的两种方式:

mysql> ALTER TABLE table1 ADD PRIMARY KEY(id);
mysql> ALTER TABLE table1 MODIFY id INT PRIMARY KEY;

删除主键、无须填写主键名称:

mysql> ALTER TABLE table1 DROP PRIMARY KEY; 

外键:

主键用于标志表中的数据,而外键用于表之间的联系。

所有的表必须是InnoDB类型、要建立外键的字段必须建立约束。

添加外键约束:

mysql> ALTER TABLE table1
ADD CONSTRAINT 外键名称 FOREIGN KEY(tid)
REFERENCES table2(id)
ON DELETE RESTRICT
ON UPDATE CASCADE;

外键所在的字段必须与关联的字段类型对应,

下面是几种关联操作类型:

CASCADE:外键表中外键字段会跟随父表被更新,或所在的列会被删除。

NO ACTION:不进行任何关联操作。

RESTRICT:相当于NO ACTION,即不进行任何操作。拒绝父表修改外键关联列,删除记录。

SET NULL:在父表的外键关联字段被修改或删除时,外键表的外键被设置为空NULL。

外键与主键均可使用SHOW来查看:

mysql> SHOW CREATE TABLE table1; 

删除外键:

mysql> ALTER TABLE table1 DROP FOREIGN KEY 外键名;

一个表中的外键可能不止一个,上述语句可以删除指定的一个外键,删除多个外键可重复上述语句。

为字段添加默认值:

mysql> ALTER TABLE 表名称 ALTER 字段名称 SET DEFAULT 默认值数据;
mysql> ALTER TABLE table1 ALTER name SET DEFAULT '表1';

删除默认值:

mysql> ALTER TABLE 表名称 ALTER 字段名称 DROP DEFAULT;

唯一性约束:

可以保证一列或几列不出现重复值。

创建表时添加唯一性约束的两种方式:

mysql> CREATE TABLE table1(
id INT NOT NULL UNIQUE, // 1,声明字段时直接添加
name VARCHAR(30) NOT NULL, 
UNIQUE(name) // 2,在所有字段后定义
);

删除唯一性约束:

mysql> ALTER TABLE table MODIFY name VARCHAR(30) NOT NULL;

添加唯一性约束:

mysql> ALTER TABLE 表名 ADD UNIQUE(字段列表);
mysql> ALTER TABLE table1 ADD UNIQUE(name);

自增约束:

mysql表中只能由一个AUTO_INCREMENT字段,

自增字段必须被定义为键,如外键、主键。

创建表时添加自增约束:

mysql> CREATE TABLE table1(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30)
);

在表中直接添加、其中id为主键:

mysql> ALTER TABLE table2 MODIFY id INT NOT NULL AUTO_INCREMENT; 

 删除自增约束:

mysql> ALTER TABLE table2 MODIFY id INT NOT NULL;

 自增约束的删除,并不影响其主见设置。

删除指定名称的约束:

可通过SHOW CREATE TABLE来查看约束名称,

mysql> SHOW CREATE TABLE 表名;
mysql> ALTER TABLE 表名 DROP INDEX 约束名;

根据条件查询:

mysql> SELECT 查询字段 FROM table_name WHERE 条件表达式;

查询条件:

比较:=、<、<=、>、>=、!=、!>、!<、<>;

指定范围:BETWEEN AND、NOT BETWEEN AND;

指定集合:IN、NOT IN;

匹配字符:LIKE、NOT LIKE;

是否为空值:IS NULL、IS NOT NULL;

多个查询条件:AND、OR;

分组查询:

GROUP BY 字段名 [HAVING 条件表达式] [WITH ROLLUP]

两个可选的表达式,前者用来限制分组后的显示,满足条件表达式的结果将会被显示出来;后者将会在所有记录的最后加上一条,该记录时上面所有记录的总和。

可以指定多个字段进行分组,当第一个字段的值相同时,再把相等的记录按照第二个或之后的字段进行分组;

排序查询:

ORDER BY 字段名 [ASC | DESC]

ASC:升序、DESC:降序。

LIMIT限制查询数量:

LIMIT 初始位置, 查询数量

初始位置从0开始,可以不填,默认为0.

避免重复查询:

SELECT DISTINCT 字段名称

外链接查询:

mysql> SELECT 字段表 FROM 表1 LEFT|RIGHT JOIN 表2 ON 表1.字段=表2.字段;

正则表达式:

字段名 REGEXP '匹配方式'
mysql> SELECT * FROM table1 WHERE field1 REGEXP 'some';

REGEXP为regular expression的缩写。

更新数据:

mysql> UPDATE 表名 SET 字段1=值1, 字段2=值2,... WHERE 条件表达式;

删除数据:

mysql> DELETE FROM 表名 [WHERE 条件表达式];

用户自定义变量:

mysql> SET @user_variable1 = expression1, @user_variable2 = expression2,...;
mysql> SET @user1 = 1, @user2 = 2, @user3 = 3;

在SELECT中需要使用:=才行:

mysql> SELECT @t2 := 7;

一些系统变量:

CURRENT_DATE:系统日期

CURRENT_TIME:系统时间

CURRENT_TIMESTAMP:系统日期和时间

使用SHOW VARIABLES可以得到系统变量的所有会话变量清单:

mysql> SHOW VARIABLES;

系统变量可分为全局系统变量和会话系统变量。

IF语句、相当于三目运算符:

IF(条件,结果1,结果2)

条件成立返回结果1,否则返回结果2。

合并多个字符串:

CONCAT(str1,str2,str3,...)
CONCAT_WS(x,str1,str2,str3)

第二个全称为:CONCAT WITH SEPARATOR,使用指定的连接符号进行连接。

截取指定位置的字符串:

SUBSTRING(str,pos,len)

与java中不同,最后一个参数表示截取的长度,pos的取值从1开始

删除空格或指定字符:

TRIM([BOTH|LEADING|TRAILING] [remstr] FROM str)

ABS(X):返回X的绝对值

CEIL(X):向上取整

FLOOR(X):向下取整

ROUND(X):返回离X最近的整数

RAND()、RAND(X):返回一个范围在0到1之间的随机浮点值。如果已指定一个整数参数X,则它被用作种子值

 随机生成整数:

mysql> SELECT ROUND(RAND() * 1000);

猜你喜欢

转载自zk-chs.iteye.com/blog/2262090