Mysql学习第二天

时间:2022-11-29 14:45:54

DDL 数据库定义语言(库的操作)(看懂,工作时使用较少)
1.创建一个库
         create database 库名称 [character set 码表名称 collate 字符校对集名称]
         create database day15;
        1>看到Query OK, 1 row affected (0.00 sec) 表示执行成功.
        2>sql语句语法: 结尾应使用";"号.
        3>字符校对集: 决定数据排序的。
2.显示mysql中都有哪些库了.
        show databases;
        +--------------------+
        | Database |
        +--------------------+
        | information_schema |
        | day13 |
        | mysql |
        | performance_schema |
        | test |
        +--------------------+
        可以看到除了自己创建的库之外,还有一些其他库。其他库(除了test)不要乱动。因为是保存mysql的配置信息,账户信息等等。
        test库 : 自动创建用于测试的。
3.删除一个数据
        drop database 数据库名称;
        drop database day15;
4.修改数据库码表和字符校对(不常用)
        alter database 数据库名称 character set 数据库码表 [collate 校对集名称];
        alter database day15 character set utf8 collate utf8_bin;
5.当前要使用的库(重要)
        use 库名
        use day15;
        出现Database changed,说明切换完成.
6.查看当前选择的数据库
        select database();
        +------------+
        | database() |
        +------------+
        | day15 |
        +------------+
7.显示创建库的语句.
        show create database 数据库名称;
        show create database day15;
        | day15 | CREATE DATABASE `day15` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE
        utf8_bin */ |
//-------------------------------------------------------------------------------------------------------------------------------------------------------
数据库中的数据类型 (了解,知道在什么情况下应该使用什么类型的数据)
一。数字型
        整型
         TINYINT 1字节 byte
         SMALLINT 2字节 short
         MEDIUMINT 3字节
         (常用)INT 4字节 int
         BIGINT 8字节 long
        浮点型
         FLOAT 单精度4字节 float
         **DOUBLE 8字节 double
         *DECIMAL 没有精度损失
===================================================
        DOUBLE 和 DECIMAL 区别?
         DOUBLE类型在运算时会有精度的缺失。
         DECIMAL 就是解决精度缺失问题的。(底层使用字符串来保存数字)
         单纯想表示小数属性时,使用double。
         需要频繁参与运算的小数,使用decimal。
===================================================
二。字符串类型
 注意: 字符串类型要使用单引号包裹.
        短字符串类型
        CHAR/VARCHAR (最大长度255字节)
====================================================
问题:char和varchar有什么区别?
         char定长字符串.varchar表示变长字符串.
         同时指定长度为10。当存储 abc
         char => 'abc '
         varchar => 'abc'
结论: 开发中varchar用的最多。 char只在表示固定长度的枚举中使用。例如 :性别(用01,02表示)
====================================================
长字符串类型(流类型)
      *TEXT/CLOB 保存文本(字符流) --> 当要保存的内容超过255字节时使用. java中的writer 字符
      BLOB 保存字节(字节流) --> 开发中用不到 java中的stream 字节
   Character Large Object
   binary Large Object
 区别:
      text:只能存储字符数据.
      BLOB:可以存储字符和多媒体信息(图片 声音 图像)
三、日期和时间类型
        date 只记录日期 2015-01-14
        time 只记录时间 11:36:25
        year 只记录年 2015
        datatime 又记录日期 又记录 时间 2015-01-14 11:36:25
**timestamp 同上 2015-01-14 11:36:25
   问题: datatime 和 timestamp 区别?
         这两种类型记录的数据是一模一样.
         区别在于插入的时候,如果插入datatime类型时,没有 传值,那么该类型默认值就是null;
         如果插入timestamp类型时,没有 传值,那么该类型默认值就是当前时间;
//--------------------------------------------------------------------------------------------------------------------
与创建表相关的语句(DDL) (记住,能够手写)
      CREATE TABLE table_name
      (
      field1 datatype 约束/主键约束 auto_increment,
      field2 datatype 约束,
      field3 datatype 约束
      )character set 字符集 collate 校对规则
1.创建表
      create table t_user(
      name varchar(10),
      password varchar(20),
      age int(3), -- 数字类型在声明时,可以忽略长度.
      birthday datetime,
      hiredate timestamp
      );
varchar最好指定长度
整型一般不指定.
2.查看当前库中有哪些表
        show tables;
3.查看表的结构
        desc 表名;
        desc t_user;
4.删除表
        drop table 表名;
        drop table t_user;
5.添加一列
        alter table 表名 add 列名 类型;
        alter table t_user add photo blob;
6.修改列的类型
        alter table 表名 modify 列名 类型;
        alter table t_user modify photo varchar(20);
7.修改列的名称
        alter table 表名 change 旧列名 新列名 数据类型;
        将 photo这一列 改名为 image
        alter table t_user change photo image varchar(20);
8.删除某列
        alter table 表名 drop 列名;
        alter table t_user drop image;
9.修改表的名称
        rename table 旧表名 to 新名;
        rename table t_user to user;
10(用的极少)修改表的字符集. (如果创建表时不指定,默认使用数据库的字符集)
        alter table 表名 character set 字符集 collate 校对集;
        alter table t_user character set utf8 collate utf8_bin;
//-----------------------------------------------------------------------------------------------------
列的约束 (掌握)
保证数据的完整性的.
1.非空约束(not null) 指定非空约束的列, 在插入记录时 必须包含值.
2.唯一约束(unique) 该列的内容在表中. 值是唯一的.
3.主键约束(primary key) 当想要把某一列的值,作为该列的唯一标示符时,可以指定主键约束(包含 非空约束和唯一约束). 一个表中只能指定一个主键约束列.
主键约束 , 可以理解为 非空+唯一.
注意: 并且一张表中只能有一个主键约束.
约束体现数据库的完整性.
例如:创建带有约束的表
      create table t_user2(
      id int primary key auto_increament, -- 员工编号
      name varchar(10) not null, -- 员工姓名
      loginname varchar(10) not null unique, -- 登陆名称
      password varchar(20) not null, -- 密码
      age int(3) not null, -- 年龄
      birthday datetime not null, -- 生日
      hiredate timestamp not null -- 入职日期
      );
//----------------------------------------------------------------------------------------------------------------------------
主键自动增长 (掌握)

注意:
1.前提某个表的主键是数字. 我们可以将该主键设置为自增.
2.使用主键自增可能会造成主键的断层。
3.mysql,sqlserver这两个数据库具有该功能.
4.主键自增只能给主键约束的列加。
自增就是 每次插入记录时不需要指定值. 该字段自己维护自己的值.
维护方式就是每次加1;
语法:
      create table t_user(
      id int primary key auto_increment,
      password varchar(30) not null,
      age int not null,
      birthday datetime not null,
      hiredate timestamp not null,
      number int unique
      );
//--------------------------------创建修改表练习---------------------------------------------------
      CREATE TABLE employee (
      id INT(10),
      NAME VARCHAR(10),
      gender VARCHAR(10),
      birthday DATETIME,
      entry_date TIMESTAMP,
      job VARCHAR(5),
      salary DOUBLE(5,3),
      RESUME TEXT
      );

1在上面员工表的基础上增加一个image列。

        alter table employee add image blob;

2修改job列,使其长度为60。

        alter table employee modify job varchar(60)'

3删除gender列。

        alter table employee drop gender;

4表名改为user。

        rename table employee to user;

5修改表的字符集为utf8
6列名name修改为username
        alter table employee change name username varchar(20);