数据库操作

时间:2022-04-24 04:26:13

mysql中的数据类型

MySQL支持所有标准SQL数值数据类型。

数值类型

 # 整数类型 tinyint int
        # create table i1(ti tinyint,i int,tiu tinyint unsigned,iu int unsigned)
    # 小数类型 float(m,n) double
        # create table i2(f float,d double,f2 float(5,2),d2 double(5,2));
        # 总共存m位,小数点占n位
    # decimal  小数值  更精确
        # create table i3(d decimal,d2 decimal(20,10));
unsigned 的意思是无符号,例如 tinyint unsigned  就是非负数  能让长度翻倍
    有符号值:-128 到127(- 27 到27 - 1)
    无符号值:0到255(0 到28 - 1) 1个字节

字符串类型

 # char(255) :
        # 定长 : char(10) 'alex      '
            # 浪费空间
            # 存取快
    # varchar(65535)
        # 变长 : varchar(10) 'aaaaaaaa'
            # 节省空间
            # 存取慢
    # char 手机号码 身份证号 用户名 密码
    # varchar 评论 发表的微博

    # create table s1(c char(4),vc varchar(4));
    # create table s2(c char(10),vc varchar(10));

时间类型

数据库操作

# 时间类型
    # datetime :年月日时分秒 开奖时间 聊天记录 账务 打卡时间
    # date : 发工资 生日 放假 入职离职时间 入学毕业时间
    # time : 上课时间 闹铃 体育项目/计算用时
    # year : 以年为单位做统计
    # timestamp时间戳 : 已经不常用了

    # create table t1(dt datetime,d date,t time,y year,ts timestamp);
    # insert into t1 values(now(),now(),now(),now(),now())
    # insert into t1(dt) values ('2018-07-07 10:00:00')
    # insert into t1(dt) values (20170808100000)

    # create table t2(
    # y year,
    # dt datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    # )

ENUM和SET类型

 # enum 枚举方法 单选方法
        # 性别
  # set 集合方法 多选方法/去重
        # 爱好
mysql> create table t10 (name char(20),gender enum('female','male'));

# 选择enum('female','male')中的一项作为gender的值,可以正常插入
mysql> insert into t10 values ('nezha','male');
Query OK, 1 row affected (0.00 sec)

# 不能同时插入'male,female'两个值,也不能插入不属于'male,female'的值
mysql> insert into t10 values ('nezha','male,female');
ERROR 1265 (01000): Data truncated for column 'gender' at row 1

mysql> create table t11 (name char(20),hobby set('抽烟','喝酒','烫头','翻车'));

# 可以任意选择set('抽烟','喝酒','烫头','翻车')中的项,并自带去重功能
mysql> insert into t11 values ('yuan','烫头,喝酒,烫头');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t11;
 ------ --------------- 
| name | hobby        |
 ------ --------------- 
| yuan | 喝酒,烫头     |
 ------ --------------- 
1 row in set (0.00 sec)

# 不能选择不属于set('抽烟','喝酒','烫头','翻车')中的项,
mysql> insert into t11 values ('alex','烫头,翻车,看妹子');
ERROR 1265 (01000): Data truncated for column 'hobby' at row 1

  

关于表

表介绍

表就相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段
存储这员工信息的文件是这样的:

id,name,age,sex,phone,job
1,Alex,83,female,13651054608,IT
2,Egon,26,male,13304320533,Tearcher
3,nezha,25,male,13332353222,IT
4,boss_jin,40,male,13332353333,IT

如果把上面这个文件改成一张表,应该是下面这个样子

数据库操作

id,name,age,sex,phone,job称为字段,其余的,一行内容称为一条记录 

创建表

#语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]);

#注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的


mysql> create database staff;
Query OK, 1 row affected (0.00 sec)

mysql> use staff;
Database changed
mysql> create table staff_info (id int,name varchar(50),age int(3),sex enum('male','female'),phone bigint(11),job varchar(11));
Query OK, 0 rows affected (0.02 sec)


mysql> show tables;
 ----------------- 
| Tables_in_staff |
 ----------------- 
| staff_info      |
 ----------------- 
1 row in set (0.00 sec)

mysql> desc staff_info;
 ------- ----------------------- ------ ----- --------- ------- 
| Field | Type                  | Null | Key | Default | Extra |
 ------- ----------------------- ------ ----- --------- ------- 
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(50)           | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| phone | bigint(11)            | YES  |     | NULL    |       |
| job   | varchar(11)           | YES  |     | NULL    |       |
 ------- ----------------------- ------ ----- --------- ------- 
6 rows in set (0.00 sec)

mysql> select id,name,sex from staff_info;
Empty set (0.00 sec)

mysql> select * from staff_info;
Empty set (0.00 sec)

插入表中内容

mysql> insert into staff_info (id,name,age,sex,phone,job) values (1,'Alex',83,'female',13651054608,'IT');
Query OK, 1 row affected (0.00 sec)

mysql> insert into staff_info values (2,'Egon',26,'male',13304320533,'Teacher');
Query OK, 1 row affected (0.00 sec)

mysql> insert into staff_info values (3,'nezha',25,'male',13332353222,'IT'),(4,'boss_jin',40,'male',13332353333,'IT');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from staff_info;
 ------ ---------- ------ -------- ------------- --------- 
| id   | name     | age  | sex    | phone       | job     |
 ------ ---------- ------ -------- ------------- --------- 
|    1 | Alex     |   83 | female | 13651054608 | IT      |
|    2 | Egon     |   26 | male   | 13304320533 | Teacher |
|    3 | nezha    |   25 | male   | 13332353222 | IT      |
|    4 | boss_jin |   40 | male   | 13332353333 | IT      |
 ------ ---------- ------ -------- ------------- --------- 
4 rows in set (0.00 sec)

查看表结构

查看表结构有两种方式:

describe [tablename];这种方法和desc [tablename];效果相同;可以查看当前的表结构。

虽然desc命令可以查看表的定义,但是其输出的信息还不够全面,为了得到更全面的表定义信息,有时候就需要查看创建表的SQL语句,使用show create table语法。除了可以看到表定义之外,还可以看到engine(存储引擎)和charset(字符集)等信息。(G选项的含义是是的记录能够竖向排列,以便更好的显示内容较长的记录。)

mysql> describe staff_info;
 ------- ----------------------- ------ ----- --------- ------- 
| Field | Type                  | Null | Key | Default | Extra |
 ------- ----------------------- ------ ----- --------- ------- 
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(50)           | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| phone | bigint(11)            | YES  |     | NULL    |       |
| job   | varchar(11)           | YES  |     | NULL    |       |
 ------- ----------------------- ------ ----- --------- ------- 
6 rows in set (0.00 sec)

mysql> desc staff_info;
 ------- ----------------------- ------ ----- --------- ------- 
| Field | Type                  | Null | Key | Default | Extra |
 ------- ----------------------- ------ ----- --------- ------- 
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(50)           | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| phone | bigint(11)            | YES  |     | NULL    |       |
| job   | varchar(11)           | YES  |     | NULL    |       |
 ------- ----------------------- ------ ----- --------- ------- 
6 rows in set (0.00 sec)

mysql> show create table staff_infoG;
*************************** 1. row ***************************
       Table: staff_info
Create Table: CREATE TABLE `staff_info` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  `sex` enum('male','female') DEFAULT NULL,
  `phone` bigint(11) DEFAULT NULL,
  `job` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)

ERROR: 
No query specified

修改表结构

语法:
1. 修改表名
      ALTER TABLE 表名 
                      RENAME 新表名;

2. 增加字段
      ALTER TABLE 表名
                      ADD 字段名  数据类型 [完整性约束条件…],
                      ADD 字段名  数据类型 [完整性约束条件…];
                            
3. 删除字段
      ALTER TABLE 表名 
                      DROP 字段名;

4. 修改字段
      ALTER TABLE 表名 
                      MODIFY  字段名 数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                      CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                      CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

5.修改字段排列顺序/在增加的时候指定字段位置
    ALTER TABLE 表名
                     ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
    ALTER TABLE 表名
                     ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
    ALTER TABLE 表名
                     CHANGE 字段名  旧字段名 新字段名 新数据类型 [完整性约束条件…]  FIRST;
    ALTER TABLE 表名
                     MODIFY 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;