MySQL —(Day01)DDL与DML基础

一:链接MySQL 

连接mysql
    1.开启服务 
        1.1 打开 我的电脑 右键  服务和应用程序  服务  运行
        
        1.2 管理员身份 运行 cmd 
             net start 服务名    
             net stop  服务名
             
    2.连接mysql 
        2.1 dos命令连接
            2.1.1 cmd  打开dos窗口
                  mysql -uroot -p123456
             
            2.1.2 cmd 打开dos窗口
                  mysql -uroot -p
                  Enter password: ******
                  
        2.2 直接使用mysql的客户端
        
        
        2.3 使用ide工具
        
        2.4 JDBC 

二:MySql的基本操作

一.登陆到mysql数据库
    mysql -uroot -p123456
    
二.常见操作
    2.1 展示所有的数据库
     show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    
    2.2 创建数据库
       
        create database A;
        Query OK, 1 row affected (0.00 sec) 成功
        
    2.3 创建表
     --  ERROR 1046 (3D000): No database selected
     --  先有库 才能有表    表必须创建在数据库中,先选择数据库在创建表
     
     
    --  选择数据库 
          use 数据库名字;

          
          use A;
          Database changed
        --  varchar(20) 字符串
        
        create table 表名(
        
            字段名 字段类型,
            字段名 字段类型,
            .....
            最后字段  字段类型 
        
        );
        create table A1(
            
            id int,
            sname varchar(20)
        );        
        create table a2(

            id int,
            age int,
            salary double,
            sname varchar(20)
        
        );
    2.4    -- 展示当前库内所有的表
        show tables;
        
    2.5    -- 向表内添加数据
        
        insert into 表名 values(字段值1,字段值2);
        
        insert into a1 values(1,'zs');
        insert into a1 values(2,'ls');
        
        insert into a2 values (1,20,456.7,'wanganshi');
        insert into a2 values (2,22,456.7,'lishangyin');
        
    2.6    -- 获取表内的数据
        
        select * from a1;-- 获取a1表内所有的数据
        select * from a1;
        +------+-------+
        | id   | sname |
        +------+-------+
        |    1 | zs    |
        |    2 | ls    |
        +------+-------+
        
        select * from a2;
        +------+------+--------+------------+
        | id   | age  | salary | sname      |
        +------+------+--------+------------+
        |    1 |   20 |  456.7 | wanganshi  |
        |    2 |   22 |  456.7 | lishangyin |
        +------+------+--------+------------+
三.中文乱码
       insert into   a1 values(3,"李白");
       
       -- 显示mysql的编码
        show variables like 'character%';
        +--------------------------+-----------------------------------------+
        | Variable_name            | Value                                   |
        +--------------------------+-----------------------------------------+
        | character_set_client     | gbk                                     |
        | character_set_connection | gbk                                     |
        | character_set_database   | latin1                                  |
        | character_set_filesystem | binary                                  |
        | character_set_results    | gbk                                     |
        | character_set_server     | latin1                                  |
        | character_set_system     | utf8                                    |
        | character_sets_dir       | C:\install\mysql\server\share\charsets\ |
        +--------------------------+-----------------------------------------+
       
       
    3.1解决一:在创建数据库时指定编码
       
       create database B charset 'utf8';
       
       use B;
       
        create table B1(
            
            id int,
            sname varchar(20)
        );
        
        insert into B1 values(1,"李白");
        
        select * from b1;
       
    3.2解决二:一劳永逸解决不能插入中文问题

                (找到安装目录"C:\install\mysql\data\my.ini")
       
        3.2.1  去掉 66  99 行 #  在等号后面写 utf8
              default-character-set=utf8
              character-set-server=utf8
        3.2.2 关闭mysql 重启服务
        (此时乱码问题已经解决了但对于已经创建好的数据库,不受影响,需要新建数据库进行测试)
        
        3.2.3 再次创建数据库进行测试
        

          create database c;
          
          use c;
          create table C1(
            
            id int,
            sname varchar(20)
            );
            
        insert into C1 values(1,"李白");
         
      注意:
          对my.ini的修改 对以后创建的数据库有效 对之前的没有效果
       

三:mysql的数据类型

一.整型数据类型 
    int  有符号 有正负   
         无符号 unsigned  没有负数只有正数  最小值是0
         
    int(数值) 宽度(需要和unsigned 一起使用,否则无意义)
    
    
    zerofill: 当 数据长度不够宽度 补0 当超过宽度 那就存指定的值
    
    create database variabletype;
    
    use variabletype;

    create table inttest(
    
        id int,
        id2 int(4)
    
    );
    
    insert into inttest values(1,1);
    insert into inttest values(10000,10000);

    select * from inttest;
    
    create table inttest2(
        id int,        
        id2 int(4) unsigned zerofill -- id2 是无符号的值 宽度为4 不够宽度 用0补齐
    );

    
    insert into inttest2 values(-1,-1); --最小值是0不能添加
    
    
    insert into inttest2 values(-1,1);
    
    +------+------+
    | id   | id2  |
    +------+------+
    |   -1 | 0001 |
    +------+------+
    
    insert into inttest2 values(-10000,10000);
    

三:浮点型

浮点类型:
    create table doubletest(
    
        height double,
        
        salary double(5,2)-- 最多有五个数字 其中两位小数
    
    );
    
    double: 能存最大的小数
            如果小数位数过长 无法精确表示

    
    double(m,n): m 最多多少位   n 小数的个数
                当小数的位数过长 会舍弃并四舍五入

例如 double(5,2)表示总共有5位,小数部分占2位。
    
    
    insert into doubletest values(3.14,6.28);
    
    insert into doubletest values(3.144,6.281);
    
    insert into doubletest values(33333.144,66666.281);
    insert into doubletest values(33333.144,666.281);
    insert into doubletest values(33333.144,666.289);
    
    insert into doubletest values(3.333333333333333333333333333,666.289);
    
    select * from doubletest;
    
    mysql> select * from doubletest;
        +--------------------+--------+
        | height             | salary |
        +--------------------+--------+
        |               3.14 |   6.28 |
        |              3.144 |   6.28 |
        |          33333.144 | 666.28 |
        |          33333.144 | 666.29 |
        | 3.3333333333333335 | 666.29 |
        +--------------------+--------+
    
    -- decimal 可以表示更精确的小数
                 decimal 没写宽度 只保留整数 且会对小数进行四舍五入

                (自己测试默认宽度是10   decimal(10,0))
                decimal(20,18) 一共有20位 18位是小数  小数位数不足 补0
    create table decimaltest(
    
      id decimal,
      
      id2 decimal(20,18)
    
    );
    
    insert into decimaltest values(3.14,3.666);
    insert into decimaltest values(3.64,3.666);
    insert into decimaltest values(3.64,3.111111111111111111);
    
    select * from decimaltest;
        +------+----------------------+
        | id   | id2                  |
        +------+----------------------+
        |    3 | 3.666000000000000000 |
        |    4 | 3.666000000000000000 |
        |    4 | 3.111111111111111111 |
        +------+----------------------+
    
    
bit:会将值转为二进制进行存储
     如果不写宽度 只能存一个值
        写宽度 就可以存宽度个值

        
        进行读取时 使用 bin()进行解析

    create table bittest(
    
        id bit,
        id2 bit(3)
    
    );
    

    insert into bittest values(1,1);
    insert into bittest values(1,20);
    
    
    select bin(id),bin(id2) from bittest;

四:日期类型
    


    

7.日期类型

  
  create table datetest(
    
    y year,-- 年
    d date,-- 年月日
    t time,-- 时分秒
    dt datetime, --   年月日 时分秒
    tt timestamp --   年月日 时分秒 随着时区的变化 自动变化

  );
  -- 新增数据 now() 获取当前时间
  insert into datetest values(now(),now(),now(),now(),now());
  
  -- 获取结果
  
  select * from datetest;
  select * from datetest;
    +------+------------+----------+---------------------+---------------------+
    | y    | d          | t        | dt                  | tt                  |
    +------+------------+----------+---------------------+---------------------+
    | 2021 | 2021-11-08 | 14:53:25 | 2021-11-08 14:53:25 | 2021-11-08 14:53:25 |
    +------+------------+----------+---------------------+---------------------+
    -- 更改时区到东九区
   set time_zone='+9:00';
   
   set time_zone='+8:00';
  
   select * from datetest;
    +------+------------+----------+---------------------+---------------------+
    | y    | d          | t        | dt                  | tt                  |
    +------+------------+----------+---------------------+---------------------+
    | 2021 | 2021-11-08 | 14:53:25 | 2021-11-08 14:53:25 | 2021-11-08 15:53:25 |
    +------+------------+----------+---------------------+---------------------+
    
    
    insert into datetest values('2023','2024-2-8','19:38:46','2024-12-3 13:23:45','2025-12-3 13:23:45');
  
    select * from datetest;
    +------+------------+----------+---------------------+---------------------+
    | y    | d          | t        | dt                  | tt                  |
    +------+------------+----------+---------------------+---------------------+
    | 2021 | 2021-11-08 | 14:53:25 | 2021-11-08 14:53:25 | 2021-11-08 14:53:25 |
    | 2023 | 2024-02-08 | 19:38:46 | 2024-12-03 13:23:45 | 2025-12-03 13:23:45 |
    +------+------------+----------+---------------------+---------------------+
    
    select y '年',d '年月日',t '时分秒',dt '年月日时分秒' , tt '年月日时分秒与时区有关' from testdate;
    
        +------+------------+----------+---------------------+------------------------+
    | 年   | 年月日     | 时分秒   | 年月日时分秒        | 年月日时分秒与时区有关 |
    +------+------------+----------+---------------------+------------------------+
    | 2021 | 2021-11-08 | 20:51:44 | 2021-11-08 20:51:44 | 2021-11-08 20:51:44    |
    +------+------------+----------+---------------------+-----------------------
    

  

 五:字符类型/enum/set类型

一.创建表
    /*
     char 如果没有写宽度 那么只能存一个字符  固定长度字符串
     varchar  都是字符串                  可变长度字符串
    注意:
      1.字符串既可以使用单引号 也可以使用 双引号
      2.varchar 使用时必须指明宽度

    */
    create table charTest(
    
        sex char,
        s char(20),
        sname varchar(20)
    
    );
    
    insert into charTest values('男',"李白",'王安石');
    insert into charTest values('男的',"李白",'王安石');
    
    create table charTest1(
    
        sex char,
        s char(20),
        sname varchar(20)
    
    );
    
    
    
    -- enum 规定该字段的值仅有 有限的几个值
    
    create table enumtest(
    
        id int,
        sname varchar(20),
        sex enum('男','女')

    );
    
    insert into enumtest values(1,'李白','男');
    insert into enumtest values(2,'李清照','女');
    select * from enumtest;
    +------+--------+------+
    | id   | sname  | sex  |
    +------+--------+------+
    |    1 | 李白   | 男   |
    |    2 | 李清照 | 女   |
    +------+--------+------+
    2 rows in set (0.00 sec)
    --insert into enumtest values(2,'李白','男的');
    --ERROR 1265 (01000): Data truncated for column 'sex' at row 1
    
    -- set
    -- 规定了字段的值仅有有限的几个 
    -- 输入值的方式 '读书,登山'
    -- 也可以采用 数字相加 9 2^0 开始是第一个值
    -- set 里面最多有64个值

    
    create table settest(
    
        id int,
        sname varchar(20),
        --                  1        2         4            8     16
        hobby set('读书','写代码','打游戏','登山','游泳')

    );
    
    
    insert into settest values(1,'张三','读书');
    
    insert into settest values(1,'张三','看报');-- 错误的 没有看报
    
    insert into settest values(1,'张三','读书','登山');

    insert into settest values(1,'张三','读书,登山');
    
    insert into settest values(2,'李四',3);-- 读书,写代码
    insert into settest values(2,'王安石',4);--  打游戏
    insert into settest values(3,'安琪拉',2);
    insert into settest values(4,'汉子哥',1);
    
    insert into settest values(5,'嬴政',6);
    insert into settest values(5,'嬴政',15);
    

六:MySql语法规范


/*
1. mysql 不区分大小写

展现mysql 核对规则 
  show variables like 'colla%'; ci 结尾 不区分大小写  (默认ci结尾)
    +----------------------+-----------------+
    | Variable_name        | Value           |
    +----------------------+-----------------+
    | collation_connection | gbk_chinese_ci  |
    | collation_database   | utf8_general_ci |
    | collation_server     | utf8_general_ci |
    +----------------------+-----------------+
2. 对数据库名 表名 字段名命名时 见名之意 26 英文 数字 下划线

3. 不要使用 关键字  如果非要使用 可以使用 飘号包裹 ``

4. 一个DBMS内 可以有多个数据库  但是各个数据库不能重名
   一个数据库内可以有多张表     但是各个表不能重名
   一个表可以有多个字段        但是各个字段不能重名

5. 起别名 
    字段的后面 as 别名的名称  as 可以省略
      如果有特殊字符 需要使用 引号 将 别名进行包裹

      
6.标点符号 必须是英文半角

7.注释
    -- 单行注释
    #  单行注释
    /*  * / 多行注释
*/

create table c(

age int,

age double
);


create database a;

-- 获取datetest 中所有的数据
select * from datetest;

-- 获取datetest y dt 字段的数据
select y,dt from datetest;

select y as '年份' ,dt 年月日时分秒 from datetest;
--  如果有特殊字符 需要使用 引号 将 别名进行包裹
select y as '年份' ,dt '年月日 时分秒' from datetest;

七:Sql语言的分类

DDL: 数据库定义语言  创建库 创建表  删除库 删除表  添加字段 删除字段....

           (用于操作数据库和表的语言,并非直接操作数据)

DML:数据库操纵语言 对数据的 增删改

DQL: 数据库查询语言  查

DCL: 数据库控制语言  事务控制  权限管理
-- 展示所有的库
    show databases;

DDL语言 

-- 创建数据库

   create database 数据库名;
   create database e;
 
-- 删除库

    drop database 数据库名;

    drop database b;
-- 创建表
    
    create table ctest(id int,
        sname varchar(20)
    );

-- 展示所有的表

   show tables;
-- 删除表
   
   drop table 表名;   
   
   drop table ctest;
 -- 展示建表语句
 
    show create table bittest;
    
    
     CREATE TABLE `bittest` (
      `id` bit(1) DEFAULT NULL,
      `id2` bit(3) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
 

DDL下

-- 展现对表中字段的操作

-- 列的定义 : 列的名字+列的类型

create table ctest(

    id int,
    sname varchar(20)

);


desc ctest;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| sname | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

-- 添加数据
insert into ctest values(1,"李白");


-- 查看数据

select * from ctest;

insert into ctest values(2,"李白",20);

-- 添加字段
-- ALTER  TABLE tbl_name ADD  列的定义 [FIRST | AFTER col_name ]
-- 默认添加到最后 也可以指定 添加到那个位置
alter table ctest add age int;

alter table ctest add salary double after sname;

desc ctest;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | id     | int(11)     | YES  |     | NULL    |       |
    | sname  | varchar(20) | YES  |     | NULL    |       |
    | salary | double      | YES  |     | NULL    |       |
    | age    | int(11)     | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+

-- 删除字段
-- ALTER  TABLE tbl_name DROP [COLUMN] col_name
-- 删除 sname 字段
alter table ctest drop sname;
-- 删除 age 字段
alter table ctest drop COLUMN age;

desc ctest;
+--------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| id     | int(11) | YES  |     | NULL    |       |
| salary | double  | YES  |     | NULL    |       |
+--------+---------+------+-----+---------+-------+

-- 修改字段
-- 修改名字 及类型

-- ALTER  TABLE tbl_name CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]
alter table ctest change id id2 int(5) after salary;

alter table ctest change salary s2 double(5,3);

desc ctest;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | s2    | double(5,3) | YES  |     | NULL    |       |
    | id2   | int(5)      | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
-- 修改类型
-- ALTER TABLE tbl_name  MODIFY column_definition [FIRST|AFTER col_name];
alter table ctest modify s2 double;

-- 修改表名
-- ALTER TABLE tbl_name  RENAME [TO] new_tbl_name;

alter table ctest rename person;

DML(完成对表格数据的新增)(重要)

-- 一.完成对表格数据的新增

        create table dog(
            id int,
            dname varchar(20),
            sex char
        );
        
    -- insert into 表名 values (字段值1,字段值2......);    
    insert into dog values(1,"旺财",'公');
    insert into dog values(2,"小黑",'公');
    
    -- 批量添加  
    insert into dog values(3,"小花","母"),(4,"小白","母"),(5,"小红","母");
    
    -- 给指定的字段赋值
    -- insert into 表名(字段名1,字段名2.。。。) values (字段值1,字段值2......)
    insert into dog(id,sex)values(6,'公');
    insert into dog(id,sex)values(7,'公'),(8,'公'),(9,'公');
    
    -- 插入给指定的字段赋值 
    -- insert into 表名 set 字段名 = 字段值,字段名 = 字段值...;
    
    insert into dog set sex ='公';
    insert into dog set dname ='小土';
    
    insert into dog set id = 10, dname = '来福';
    
-- 二.更新

    update 表名  set 字段名 = 字段值  [where] 筛选条件;
    如果没有筛选条件 那么 修改整张表所有的数据
    如果有筛选条件 那么 只修改满足筛选条件的数据
    
    -- 将 id =1 的 数据 名字改为 666
    
    update dog set dname = '666' where id  =1;
    -- 全部修改
    update settest set id = 6;
  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值