CMD里面的命令:mysql -uroot -p
若显示Can’t connect to MySQL sever on ‘localhost’,那么右键计算机-管理-服务-重新启动MySQL即可
MySQL语句规范
SQL必须用分隔符结尾
数据名称和表名称最好都小写
将分隔符由;改为了//,程序见到//才会停止
mysql -uroot -p delimiter=//
开启输出日志
\T D:\MySQL\output_diary\mysql1.txt
\t ##表示停止写日志
CREATE DATABASE [IF NOT EXISTS] maizi1;
[ ]表示可选,就是可敲可不敲
创建不同于默认的编码方式的数据库
SHOW CREATE DATABASE maizi1 DEFAULT CHARACTER SET = 'gck'
修改已有数据库的编码方式
ALTER DATABASE maizi3 DEFAULT CHARACTER SET utf8
查看上一步产生的警告
SHOW WARNINGS;
查看已有的数据库
SHOW DATABASES;
查看已有数据库的定义
SHOW CREATE DATABASE maizi1;
打开数据库
USE db_name
查看当前打开数据库的名称
SELECT DATABASE();
删除指定数据库
DROP DATABASE maizi4
数据表是数据库最重要的组成部分之一,是其他对象的基础,数据表是存储数据的数据结构,数据表是包含了行和列构成的二维网络。
数据表至少有一列,可以没有行或者多行,数据表名称要求唯一,而且不要包含特殊字符。
整数类型
TINYINT
有符号:±27-1,无符号:(0,28-1)
SMALLINT:跟上面一样,不过指数部分分别为215,216
MEDIUMINT:223,224
INT:231,232
BIGINT:265,264
BOOL,BOOLEN:TINYINT(1),0为TRUE,其他为FALSE
不用死记硬背,可以通过help \h ? 来查看数据类型的范围
浮点类型
FLOAT[(M,D)]:M代表数字总位数,D代表小数后面的位数。
字符串类型
日期时间类型
什么是存储引擎?
用户可以根据不同的存储方式,来选择存储引擎。
如何查看MySQL数据引擎
SHOW ENGINES\G;
\G:表示分行显示
SHOW VARIABLES LIKE 'have%';
同一个数据库可以使用多个数据引擎,根据不同的表进行选择。
# 注释内容
-- 注释内容
-- 创建maizi数据库
CREATE DATABASE IF NOT EXISTS `maizi` DEFAULT CHARACTER SET 'UTF8';
USE `maizi`;
-- 创建学员表(user)
-- 编号 id
-- 用户名 username
-- 年龄 age
-- 性别 sex
-- 邮箱 email
-- 地址 addr
-- 生日 birth
-- 薪水 salary
-- 电话 tel
-- 是否结婚 married
-- 注意:当需要输入中文的时候,需要临时转换客户端的编码方式
-- SET NAMES GBK;
-- 字段注释 通过COMMENT 注释内容 给字段添加注释
CREATE TABLE IF NOT EXISTS `user`(
id SMALLINT,
username VARCHAR(20),
age TINYINT,
sex ENUM('男','女','保密'),
email VARCHAR(50),
addr VARCHAR(200),
birth YEAR,
salary FLOAT(8,2),
tel INT,
married TINYINT(1) COMMENT '0代表未结婚,非0代表已婚'
)ENGINE=INNODB CHARSET=UTF8;
DESC tbl_name
DESCRIBE tbl_name
SHOW COLUMNS FROM tbl_name
INSERT tbl_name VALUE|VALUES(值,...);
SELECT * FROM tbl_name;
SELECT * FROM test1;
测试整型
CREATE TABLE test2(
num1 TINYINT UNSIGNED,
num2 TINYINT
);
INSERT test2 VALUES(0,-12);
CREATE TABLE test3(
num1 TINYINT ZEROFILL,
num2 SMALLINT ZEROFILL,
num3 MEDIUMINT ZEROFILL,
num4 INT ZEROFILL,
num5 BIGINT ZEROFILL
);
用零填充默认用零填充,使得位数达到最大值,作用是显示美观,长度一致
测试浮点型
CREATE TABLE test4(
num1 FLOAT(6,2),
num2 DOUBLE(6,2),
num3 DECIMAL(6,2)
);
INSERT test4 VALUES(3.1415,3.1415,3.1415);
INSERT test4 VALUES(3.1495,3.1495,3.1495);
mysql> SELECT * FROM test4;
+------+------+------+
| num1 | num2 | num3 |
+------+------+------+
| 3.14 | 3.14 | 3.14 |
| 3.15 | 3.15 | 3.15 |
+------+------+------+
2 rows in set (0.00 sec)
查询数据
mysql> SELECT * FROM test4 WHERE num1=3.15;
+------+------+------+
| num1 | num2 | num3 |
+------+------+------+
| 3.15 | 3.15 | 3.15 |
+------+------+------+
1 row in set (0.00 sec)
区别DECIMAL和FLOAT和DOUBLE的区别
mysql> SELECT * FROM test4 WHERE num1='3.14';
Empty set (0.00 sec)
mysql> SELECT * FROM test4 WHERE num3='3.14';
+------+------+------+
| num1 | num2 | num3 |
+------+------+------+
| 3.14 | 3.14 | 3.14 |
+------+------+------+
1 row in set (0.00 sec)
所以说DECIMAL的精度更高。
查询字符串
CHAR定长字符串,占用空间大,速度快。
VARCHAR变长字符串,占用空间小,速度慢。
-- 测试CHAR和VARCHAR
CREATE TABLE IF NOT EXISTS test5(
str1 CHAR(5),
str2 VARCHAR(5)
);
INSERT test5 VALUES('1','1');
INSERT test5 VALUES('12345','12345');
INSERT test5 VALUES('123456','123456');
枚举类型
mysql> -- 测试枚举类型
mysql> CREATE TABLE IF NOT EXISTS test7(
-> sex ENUM('男','女','保密 ')
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT test7 VALUES('男 ');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> INSERT test7 VALUES('女 ');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> INSERT test7 VALUES('保密');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> INSERT test7 VALUES('保密1');
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
mysql>
mysql> INSERT test7 VALUES(2);
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> INSERT test7 VALUES(0);
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
mysql>
mysql> INSERT test7 VALUES(NULL);
Query OK, 1 row affected (0.00 sec)
ENUM会自动去掉空格,保密1不属于二者之一,所以传入失败,NULL可以传入,0不可以传入
集合类型
mysql> -- 测试集合类型
mysql>
mysql> CREATE TABLE IF NOT EXISTS test8(
-> fav SET('A','B','C','D')
-> );
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> INSERT test8 VALUES('A,C,D');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> INSERT test8 VALUES('D,B,A');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> INSERT test8 VALUES(3);
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> INSERT test8 VALUES(15);
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM test8;
+---------+
| fav |
+---------+
| A,C,D |
| A,B,D |
| A,B |
| A,B,C,D |
+---------+
4 rows in set (0.00 sec)
A B C D在二进制里面分别代表1 2 4 8,所以Values(3)代表前两个爱好
测试年份
mysql> -- 测试日期时间
mysql> CREATE TABLE IF NOT EXISTS test9(
-> birth YEAR
-> );
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> INSERT test9 VALUES(1901);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT test9 VALUES(2155);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT test9 VALUES(2156);
ERROR 1264 (22003): Out of range value for column 'birth' at row 1
mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
| 2155 |
+-------+
2 rows in set (0.00 sec)
mysql> INSERT test9 VALUES(0);
Query OK, 1 row affected (0.05 sec)
mysql> INSERT test9 VALUES('0')
-> ;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
| 2155 |
| 0000 |
| 2000 |
+-------+
测试时间
mysql>
mysql> CREATE TABLE IF NOT EXISTS test10(
-> test TIME
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT test10 VALUES('1 12:12:12');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> INSERT test10 VALUES('11:11');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT test10 VALUES('1234');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT test10 VALUES('0');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT test10 VALUES('66');
ERROR 1292 (22007): Incorrect time value: '66' for column 'test' at row 1
mysql> SELECT * FROM test10;
+----------+
| test |
+----------+
| 36:12:12 |
| 11:11:00 |
| 00:12:34 |
| 00:00:00 |
+----------+
4 rows in set (0.00 sec)
测试Date
mysql> CREATE TABLE IF NOT EXISTS test11(
-> test DATE
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT test11 VALUES('12-6-7');
Query OK, 1 row affected (0.01 sec)
+------------+
| test |
+------------+
| 2012-06-07 |
+------------+
1 row in set (0.00 sec)
最大值是9999-12-31,不超过这个范围就可以。