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];
- 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 set和charset
表选项可选
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 是一个复杂的命令
数据操作
插入数据
-- 插入记录 INSERT tb_name [(col_1,...)] --这里列的顺序要和下面值的顺序对应,可省略,默认全部 VALUES (...)[,(...)]; --后面可以跟多份
-- 复制表 -- 首先使用 创建一样的表结构,使用LIKE 然后 INSERT tb_name select * from old_tb;