1.创建数据库

create database 数据库名;
如果数据库名跟数据库内置关键字相同,需要用反引号框起来,如数据库名
反引号是数字1左边的按键;
不仅创建数据库名的时候会用到反引号
在创建表,表中的列(字段)的时候都会用到,只要跟关键字冲突就得使用

如果是删除数据库,将create改成drop即可

2.创建数据表

  1. CREATE TABLE `user`(
  2. id INT,
  3. `name` VARCHAR(25),
  4. `password` VARCHAR(12),
  5. `birthday` DATE
  6. )CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;

其中CHARACTER SET表示字符集,即一个字符占用多少字节;
COLLATE 表示排序规则,即字符如何比较大小;

查看表的定义信息:
show create table user;

3.修改数据表

创建表:create table 表名
修改表:alter table 表名 具体操作
具体操作包括:
增加字段,删除字段,修改字段,修改表名,修改字段名,修改字符集等
这些都是表的结构上的修改,而不是对表中数据的修改
下面举例:

  1. CREATE TABLE `emp`(
  2. id INT,
  3. `name` VARCHAR(32),
  4. `birthday` DATE,
  5. `gender` CHAR(1),
  6. `phone_number` CHAR(11),
  7. `entry_date` DATETIME,
  8. `job` VARCHAR(32),
  9. `salary` DOUBLE,
  10. `resume` TEXT
  11. )
  1. #1.在指定的位置增加新列
  2. ALTER TABLE `emp` ADD image VARCHAR(32) NOT NULL DEFAULT "" AFTER RESUME;
  3. INSERT INTO `emp`(image) VALUES("1.jpg");
  4. #2.修改job字段的长度
  5. ALTER TABLE `emp` MODIFY job VARCHAR(60) NOT NULL DEFAULT "";
  6. #3.删除image
  7. ALTER TABLE `emp` DROP image;
  8. #4.修改表名
  9. RENAME TABLE emp TO employee;
  10. #5.修改表的字符集
  11. ALTER TABLE `employee` CHARACTER SET utf8;
  12. #6.修改字段名nameuser_name
  13. ALTER TABLE `employee` CHANGE NAME user_name VARCHAR(32) NOT NULL DEFAULT "";
  14. SELECT * FROM employee;
  15. DESC employee;

4.表中的列的常用数据类型

image.png

细分:
整形,浮点型,字符型,二进制,文本,时间
整形
比如int类型4个字节32位,2^32次方约等于40亿(无符号情况)
也就是说int类型的列不能表示50亿的数,插入数据的时候会报错,其他以此类推

字符串
主要区分char和varchar:

name char(5),表示name字段最多有5个字符(不是字节)
address varchar(10),表示address字段最多有10个字符(不是字节)

对于name,即便name=’q’,只有一个字符,实际还是会占用5个字符的空间,对应char的定长定义
对于address,当address=’a’时,实际占用的字符空间不是10,而是根据实际占用空间来定,对应varchar的变长定义(varchar本身需要1到3个字节存放内容长度)

  1. CREATE TABLE Semp1(
  2. `name` CHAR(5),
  3. `address` VARCHAR(10)
  4. );
  5. INSERT INTO semp1 VALUES('abcde','abcdefghij');
  6. SELECT * FROM semp1;

image.png
当char和varchar实际存放字符值超过设定值时无法插入成功
image.png
char和varchar如何选择
字段长度固定优先使用char,因为char的查询速度比varchar快;
字段长度不确定时使用varchar,不确定应该是一个范围内的不确定,因为varchar也需要设定最大值

类型匹配
使用show create table emp查看数据表emp的定义信息

  1. Table Create Table
  2. ------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  3. emp CREATE TABLE `emp` (
  4. `empno` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '员工编号',
  5. `ename` varchar(20) NOT NULL DEFAULT '' COMMENT '员工姓名',
  6. `job` varchar(9) NOT NULL DEFAULT '' COMMENT '员工职位',
  7. `mgr` mediumint(8) unsigned DEFAULT NULL COMMENT '上级编号',
  8. `hiredate` date NOT NULL COMMENT '入职日期',
  9. `salary` decimal(7,2) NOT NULL COMMENT '运功薪水',
  10. `bonus` decimal(7,2) DEFAULT NULL COMMENT '员工红利',
  11. `deptno` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '部门编号'
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8

在.sql文件中搜索emp得到创建和插入的记录

  1. DROP TABLE emp;
  2. #员工表
  3. CREATE TABLE emp(
  4. empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '员工编号',
  5. ename VARCHAR(20) NOT NULL DEFAULT '' COMMENT '员工姓名',
  6. job VARCHAR(9) NOT NULL DEFAULT '' COMMENT '员工职位',
  7. mgr MEDIUMINT UNSIGNED COMMENT '上级编号',
  8. hiredate DATE NOT NULL COMMENT '入职日期',
  9. salary DECIMAL(7,2) NOT NULL COMMENT '运功薪水',
  10. bonus DECIMAL(7,2) COMMENT '员工红利',
  11. deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '部门编号'
  12. )
  13. INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,'1991-01-01',5000.00,NULL,10);
  14. INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,'1991-01-02',2975.00,NULL,20);
  15. INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,'1991-01-03',2985.00,NULL,30);
  16. INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,'1991-01-04',2995.00,NULL,10);
  17. INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,'1993-01-04',1995.00,NULL,20);
  18. INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,'1994-01-04',1985.00,NULL,20);
  19. INSERT INTO emp VALUES (7782,'SMITH','CLERK',7902,'1995-01-04',995.00,NULL,20);
  20. INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,'1996-01-04',985.00,NULL,10);
  21. INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,'1998-01-04',965.00,NULL,30);
  22. INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,'1999-01-04',955.00,NULL,30);
  23. INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,'1990-01-04',945.00,NULL,30);
  24. INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,'1996-03-04',935.00,NULL,30);

整形和浮点型没有使用引号;
而字符型和日期类型则需要使用引号;
额外注意:
字符型不使用引号也能插入成功;
日期型很严格,不仅要求引号,而且格式必须是xxxx-xx-xx的形式;