review2
创建数据库:
CREATE DATABASE databaseName;
选择数据库:
USE DATABASENAME;
删除数据库:
DRAP DATABASE databaseName;
MySql常见数据类型的默认长度:
TINYINT:1字节 (-128, 127)
SMALLINT:2字节(-32768, 32767)
MEDIUMINT:3字节(-8388608,8388607)
INT:4字节(-2147483648,2147483647)
INTEGER:4字节(-2147483648,2147483647)
BIGINT:8字节(-9223372036854775808,9223372036854775807)
CHAR数据类型用于存储固定长度的字符串。它需要指定固定的长度,且在存储时会在字符串的末尾使用空格填充,使其达到指定的长度。VARCHAR数据类型用于存储可变长度的字符串,VARCHAR不会使用额外的空格进行填充,而是根据实际存储的字符串长度来动态分配存储空间。
mysql中计算字符串长度有两个函数,分别为length()和char_length(),char_length()按照字符(无视编码,任何编码下多字节字符都算一个字符)来统计,length()按照字节来统计。例如一个包含5个字符且每个字符占两个字节(比如汉字)的字符串str而言,char_length(str)返回长度5,length(str)返回长度10。utf8字符集编码下,一个汉字占三个字节;其它编码例如gbk编码下,一个汉字占两个字节。
创建表:
CREATE TABLE table_name(
column_name1 columnType1 (parameter),
column_name2 columnType2 (parameter),
……
column_nameN columnTypeN (parameter),
(PRIMARY KEY (columnName))
) (ENGINE=InnoDB DEFAULT CHARSET=utf8);
CREATE TABLE demo
(
id
INT UNSIDNED NOT NULL AUTO_INCREMENT,
data
varchar(255) NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8);
建表时表名和字段名常用反引号包裹起来是为了区分MySQL保留字和普通字符,用反引号包括起来说明就是普通字符,如果使用保留字作为表名或者字段名时,必须加上反引号来区分。
对于int类型的,如果不需要存取负值,最好加上unsigned。
对于经常出现在where语句中的字段,考虑加索引,整形的尤其适合加索引。
建表时对于数据类型后面的(number),在不同的数据类型中,number值有着不同的意义。
建表时对于整数类型例如int(number)中的number是显示长度而不是存储长度,无论number是多少存储范围都是(-2147483648,2147483647),这个number只是告诉MySql数据库这个字段的存储的数据的宽度为M位数, 如果你不是M位数(只要在该类型的存储范围之内)MySql也能正常存储。通常这个number没有意义对于整数类型除非设置ZEROFILL。
MySql从8.0.17版本开始,TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT类型的显示宽度将失效。
建表时对于字符类型后的(number)中的number表示可以储存的最大字符数,例如VARCHAR(20)表示最多可以储存20个字符,不管任何编码,一个英文或一个中文都算一个字符。
varchar在建表时必须指定能够存储的最大字符数,不指定会报错,在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为char_length+1字节),M最大值为65535。char可以不指定,如果指定M最大为255。
当我们需要存储小数,并且有精度要求,比如存储金额时,通常会考虑使用DECIMAL字段类型,因为float、double类型无法确保精度,很容易产生误差,特别是在求和计算的时候,而DECIMAL以字符串形式储存,基本没有误差。DECIMAL类型从MySQL 5.1引入,声明语法是DECIMAL(M, D),M参数称为精度(最大位数),范围为1-65,可不指定,默认为10,D参数称为小数点右边的位数,范围为0-30,并且不能大于M,可不指定,默认值为0。例如DECIMAL(5,2)可存储范围是从-999.99到999.99,超出存储范围会报错。
建表时对于浮点数类型后的(M, D)中的M参数称为精度,是数据的最大位数,小数点不占位置,D参数称为小数点右边的位数。
FLOAT和 DOUBLE在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决定),DECIMAL 如果不指定精度,默认为(10,0)。
删除表:
DROP TABLE table_name;
清空表(不会删除表本身也不会删除表定义只是清空表数据):
TRUNCATE TABLE table_name;
在标准SQL中,字符串使用单引号引用字符串,如果字符串本身也包括单引号,使用两个单引号表示。
MySQL中可以使用单引号和双引号表示字符串,但是如果SQL服务器模式启用了NSI_QUOTES,可以只用单引号引用字符串。
向表中插入数据:
INSERT INTO table_name (field1, field2, ……, fieldN)VALUES (value01, value02, ……, valueN), (value11, value12, ……, valueN)……;
删除表中某些数据:
DELETE FROM table_name WHERE variable = value .. [LIMIT n];
更新表中数据:
UPDATE table_name SET column_name1 = value1, column_name2 = value2 WHERE column_name3 = value3 [AND/OR] column4 = value4;
查询表中数据:
SELECT */column_name1 FROM table_name WHERE column_name2 = value2 [AND/OR] column_name2 = value3 ..;
SELECT column_name1, column_name2[,..] FROM ..;这种结果集仅包含指定列的查询称为投影查询。
WHERE后可以用NOT,例如WHERE NOT id = 1,等价为WHERE id <> 1,所以NOT查询不常用。
条件运算优先级为 NOT > AND > OR。
查询多个表:
SELECT * FROM table_name1, table_name2;
查询结果是两张表的笛卡尔乘积,即结果集的列数为table_name1和table_name2列数之和,行数为table_name1和table_name2行数之积,即table_name1表的每一行与table_name2表的每一行都两两拼在一起返回,对于两个各自有100行记录的表进行笛卡尔查询将返回1万条记录。
在SELECT语句中可以设置列的别名,例如SELECT column_name1 alias_name ..;
在SELECT语句中可以给表设置别名,例如FROM table_name alias_name;
在多表查询中给表设置别名后就可以投影查询中引用列时更简洁一点,不用table_name.column_name这种形式,例如SELECT s.id sid, c.id cid FROM students s, classes c;
SELECT查询结果集默认是根据主键排序的,可以用ORDER BY column_name [ASC/DESC]指定列按照升序(ASC)还或者降序(DESC)排序。
union可以将两个或以上select语句作为一个整体显示出来,union会对两个结果集进行并集操作删除重复行,同时进行默认规则的排序;union all会对两个结果集进行并集操作包括重复行不进行排序。进行MySql优化尽量使用union all而不是union。
MySQL通过一个名为“自增计数器”的内部计数器来生成下一个自增ID。该计数器存储了表中最后一个插入数据行的自增ID值,每当下一个INSERT语句执行时,计数器就会递增。
当自增ID(AUTO_INCREMENT)因为删除或其他操作破坏了递增连续性时,可以重置自增ID:
ALTER TABLE table_name AUTO_INCREMENT = value;
上述value为表中最大ID数加一。
插入操作失败时即据行实际上并没有插入到表中,MySQL仍然会递增自增计数器的值。
修改字段类型:
ALTER TABLE table_name MODIFY column_name columnType;
修改列名:
在Mysql中:
ALTER TABLE table_name CHANGE old_column_name new_column_nmae columnType;
在Oracle中:
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
修改表名:
Alter table old_table_name rename new_table_name
查看数据库引擎:
SHOW ENGINES;
查看数据库默认引擎:
SHOW VARIABLES LIKE ‘storage_engine’;