mysql 语法

Posted perfy576

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 语法相关的知识,希望对你有一定的参考价值。

 

1 连接数据库

语法:

mysql [-h ip][-P port] -uname -p

  

-h参数表示 主机ip,-P表示主机端口,默认端口为3306。注意P是大写的,否则和密码的p混淆。

另外mysql允许在连接阶段指定连接以后选中的数据库。

因为命令行中,都是一个选项后面才能跟一个值,如果单独出现一个值,那么mysql会将他解析为数据库名,在连接以后直接选中数据库。

-p 密码选项的值比较特殊,只能紧跟选项不能有空格,因为-p选项的值默认是忽略的避免密码被别人看到。因此如果在-p 后面加了空格跟上密码,密码会被解析为一个数据库名。

技术分享图片

 

 2 库操作

show databases;     -- 查看服务器总所有的数据库名
use db_name;        --选中名为db_name的库进行操作

select database();  --显示当前选中的数据库

  

显示当前选中的数据库操作,使用了select的原因在于,database()是一个函数,而函数的返回值并不能直接显示在终端中,因此,需要select命令来显示它。

技术分享图片

 

 

--创建数据库
create DATABASE [IF NOT EXISTS] db_name 
[[DEFAULT] CHARACTER SET latin1 COLLATE latin1_swedish_ci]; 

  

  

如果存在数据库,并且没有指定IF NOT EXISTS,则会出现错误。

后面的CHARACTER SET子句用于指定默认的数据库字符集。COLLATE子句用于指定默认的数据库整序

技术分享图片

因为当数据库刚刚被创建时,在数据库中没有表,所以CREATE DATABASE只创建一个目录(文件夹)。这个目录位于MySQL数据目录和db.opt文件之下。

如果手动在数据目录之下创建一个目录(例如,使用mkdir),则服务器会认为这是一个数据库目录,并在SHOW DATABASES的输出中显示出来。

 

--删除数据库
drop database [if exists] db_name;

  

该语句用于删除数据库,同时也删除了数据库中的所用表。对一个带有符号链接的数据库使用DROP DATABASE,则链接和原数据库都被取消。就如同上面讲的数据库本身就是个文件夹。

DROP DATABASE会返回已被取消的表的数目。此数目相当于被取消的.frm文件的数目。

技术分享图片

 

 

--更改数据库
alter database db_name  character set utf8 
[COLLATE collation_name];

  

技术分享图片

因为在创建数据的时候,选项就只有两个,因此能够修改的也比较少。只有两个

 

3 表操作

 

--创建表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tb_name
(
    col_name col_type [col_op] 
   -- 多个,使用逗号分割。
)[table_op];
-- 复制表结构
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tb_name
[(]
LIKE old_tb_name
[)][table_op];

  

col_op 部分可选的有:
  • NOT NULL 表示该字段不能为空
  • DEFAULT value 表示默认的时候可以为这个值
  • AUTO_INCREMENT 表示当该字段没有设置值的时候,自动增加
  • COMMENT ‘value‘ 当前字段的说明
  • PRIMARY [KEY] 主键约束,该字段,不能为空,且数据唯一,一个表中只能有一个
  • UNIQUE [KEY] 唯一约束,该字段,可以为空,但是数据唯一,一个表中可多次存在

一个整数列可以拥有一个附加属性AUTO_INCREMENT。当您向一个已编入索引的AUTO_INCREMENT列中插入一个NULL值(建议)或0时,此列被设置为下一个序列的值。通常情况下为value+1,此处value是当前在表中的列的最大值。AUTO_INCREMENT序列从1开始。这样的列必须被定义为一种整数类型。每个表只有一个AUTO_INCREMENT列,此列必须编制索引,不能有DEFAULT值。一个AUTO_INCREMENT列只有在只包含正数的情况下,才能运行正常。插入一个负数会被认为是插入了一个非常大的正数。这样做是为了避免当数字由正数转为负数时出现精度问题,同时也为了确保AUTO_INCREMENT列中不会包含0。

 DEFAULT子句用于为列指定一个默认值。默认值必须为一个常数,不能为一个函数或一个表达式,有一种情况例外。例如,一个日期列的默认值不能被设置为一个函数,如NOW()或CURRENT_DATE。不过,有一种例外,您可以对TIMESTAMP列指定CURRENT_TIMESTAMP为默认值。BLOB和TEXT列不能被赋予默认值。

 

 

字段类型可选 

-- length 实现显示宽度,也就是说在输出到终端上时候
-- 字符有多少位,但其实并不影响精度
-- ZEROFILL 是在原有数据不够宽度的时候补0
TINYINT[(length)] [UNSIGNED] [ZEROFILL]
SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
INT[(length)] [UNSIGNED] [ZEROFILL]
INTEGER[(length)] [UNSIGNED] [ZEROFILL]
BIGINT[(length)] [UNSIGNED] [ZEROFILL]
REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]

DATE
TIME
TIMESTAMP
DATETIME

-- length 是字符的个数,最大能存储的字符个数
-- char,varchar 默认使用utf8存储,存储的是字符的个数
-- 而不是二进制
CHAR(length) [CHARACTER SET name]
VARCHAR(length) [CHARACTER SET name]
BINARY(length) 
VARBINARY(length) 

TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
TINYTEXT [BINARY]
TEXT [BINARY]
MEDIUMTEXT [BINARY]
LONGTEXT [BINARY]

ENUM(value1,value2,value3,...)
SET(value1,value2,value3,...)

  character set可以简写为char setcharset

表选项可选

ENGINE = engine_name
AUTO_INCREMENT = value
还有很多,暂时列这两个。
 
例如
CREATE TABLE user 
(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name  BINARY(10) UNIQUE DEFAULT "new_user"
)CHARACTER SET utf8 AUTO_INCREMENT=10 ENGINE=innodb;

  

技术分享图片

然后查看mysql的目录

技术分享图片

多了两个文件

 删除表

-- 删除表
DROP TABLE [IF EXISTS] tb_name;

  

技术分享图片

技术分享图片

 

更改表结构

-- 更改表结构
ALTER [IGNORE] TABLE tb_name alter_context;

  

ALTER TABLE 是一个复杂的命令

ADD old_col col_define 改变结构
ADD index index_name col_name 增加索引
用来增加一个列,或是增加索引
CHANGE old_col new_col_name_and_define 改名并改变结构

DROP col_name 删除列
DROP PRIMARY KEY 删除主键
DROP INDEX index_name 删除索引
RENAME new_tb_name 更改表名
 

数据操作

插入数据

-- 插入记录
INSERT tb_name [(col_1,...)] --这里列的顺序要和下面值的顺序对应,可省略,默认全部
VALUES (...)[,(...)]; --后面可以跟多份

  

技术分享图片

 

-- 复制表
-- 首先使用 创建一样的表结构,使用LIKE 然后
INSERT tb_name select * from old_tb;

  

 

 

  




以上是关于mysql 语法的主要内容,如果未能解决你的问题,请参考以下文章

linux中怎么查看mysql数据库版本

JSP语法

JSP 语法

从mysql的片段中加载ListView

JSP 基础语法

vue2.0 代码功能片段