zoukankan      html  css  js  c++  java
  • 3.MySQL基本的命令行操作

    一.使用SQLyog和基本命令行操作

    1.SQLyog需要学会新建数据库,新建表和字段,执行语句:

     

    2.基本命令行操作:

     1 -- MySQL数据库单行注释
     2 /*
     3 MySQL数据库多行注释
     4 */
     5 
     6 -- 所有的语句都以分号结尾
     7 
     8 mysql -u root -p123456 --连接数据库
     9 
    10 update mysql.user set authentication_string=password('654321') where user='root' and host='localhost';
    11 flush privileges;   --修改用户密码并刷新权限
    12 
    13 --------------------------------------------------
    14 
    15 show databases;         --查看所有的数据库
    16 use school;             --切换数据库使用use 数据库名
    17 show tables;            --查看数据库中的所有表
    18 describe student;       --显示数据库中student表的信息
    19 
    20 create database westos; --创建一个数据库
    21 
    22 exit;                   --退出连接

     

    二.结构化查询语句分类

     

    三.操作数据库

    • 操作数据库:增删改查四个操作

    • 操作数据库中的表:字段类型,字段属性(约束),表类型(引擎),表字符集,增删改查四个操作

    • 操作数据库中表的数据:外键,DML语言(增删改),DQL语言(查)

    1.操作数据库(了解)

    • 创建数据库: create database [if not exists] westos; --中括号表示可选项 
    • 删除数据库: drop database [if exists] test; 
    • 使用数据库: use `school`; --使用数据库,如果名称是一个特殊的字段,需要加反引号。 
    • 查看数据库: show databases; --查看所有的数据库 

    补充: show warnings; --查看warning 

     

    2.操作数据库中的表

    (1)数据库字段的列类型

    • 数值:
      • tinyint:十分小的数据,1个字节
      • samllint:较小的数据,2个字节
      • mediumint:中等大小的数据,3个字节
      • int:标准的整数,4个字节,常用
      • bigint:较大的数据,8个字节
      • float:浮点数,4个字节
      • double:浮点数,8个字节(有精度问题)
      • decimal:字符串形式的浮点数,一般是用在金融计算的时候
    • 字符串:
      • char:字符串固定大小的,0-255
      • varchar:可变字符串,0-65535,常用对应Java的String
      • tinytext:微型文本,2^8-1
      • text:文本字符串,2^16-1,保存大文本
    • 时间日期:
      • date:YYYY-MM-DD,日期格式
      • time:HH:mm:ss,时间格式
      • datetime:YYYY-MM-DD HH:mm:ss,常用的时间格式
      • timestamp:时间戳,1970.1.1到现在的毫秒数。
      • year:年份
      null:
      • 理解为"没有值"或"未知值"(注意不要使用NULL进行运算,如果运算结果为NULL)

     

    (2)数据库字段的列属性/列约束(重点)

    • Unsigned:
      • 无符号的整数
      • 声明了该列不能声明为负数
    • zerofill:
      • 0填充的
      • 不足的位数,使用0来填充,
    • 自增:
      • 通常理解为自增,自动在上一条记录的基础上加1(默认)
      • 通常用来设计唯一的主键索引,必须为整数类型
      • 可以自定义设计主键自增的起始值和步长
    • null 和 not null:
      • 设置为not null,如果不赋值就会报错
      • 设置为null,如果不填写值,默认就为null
    • 默认:
      • 设置默认的值!

    (2.1)拓展:表设计规范

    1 /* 每个表,都必须存在以下五个字段!未来做项目会使用,表示一个记录存在的意义!
    2 id 主键
    3 `version` 乐观锁
    4 is_delete 伪删除
    5 gmt_create 创建时间
    6 gmt_update 修改时间
    7 */

     

    (3)数据表的类型

    • MySQL的数据表的类型 : MyISAM  , InnoDB , HEAP , BOB , CSV等...

    • 常见的 MyISAM 与 InnoDB 类型

    (3.1)两种类型支持的功能上的区别:

    (3.2)适用场合:

    • 适用MyISAM : 节约空间及相应速度
    • 适用InnoDB : 安全性 , 事务处理及多用户操作数据表

    (3.3)数据表的存储位置:

    • MySQL数据表以文件方式存放在磁盘中
      • 包括表文件 , 数据文件 , 以及数据库的选项文件
      • 位置 : Mysql安装目录data下存放数据表 . 目录名对应数据库名 , 该目录下文件名对应数据表 
    • 两种类型物理文件上的区别:
      • InnoDB类型数据表只有一个 *.frm文件 , 以及上一级目录的ibdata1文件
      • MyISAM类型数据表对应三个文件 :
        • * . frm  -- 表结构定义文件
        • * . MYD -- 数据文件(data)
        • * . MYI -- 索引文件(index)

     

    (4) 数据表的字符集编码

    • 注:不设置的话,会使用mysql默认的字符集编码(不支持中文)
      1 CREATE TABLE 表名(
      2     ......
      3 )CHARSET = utf8;

     

    (5)创建数据库中的表

    (5.1)格式:

    1 create table [if not exists] `表名`(
    2     `字段名` 列类型 [属性] [索引] [注释],
    3     .......
    4     `字段名` 列类型 [属性] [索引] [注释],
    5     `字段名` 列类型 [属性] [索引] [注释]
    6 )[表类型] [字符集设置] [注释]

    (5.2)案例:

     1 # 创建学生表(列,字段)
     2 # 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email
     3 # 创建表之前 , 一定要先选择数据库
     4 
     5 # 字符串使用单引号括起来!
     6 # 所有的语句后加英文逗号,最后一个不用加
     7 # PRIMARY KEY 主键
     8 CREATE TABLE IF NOT EXISTS `student` (
     9   `id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
    10   `name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
    11   `pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
    12   `sex` varchar(2) NOT NULL DEFAULT '' COMMENT '性别',
    13   `birthday` datetime DEFAULT NULL COMMENT '生日',
    14   `address` varchar(100) DEFAULT NULL COMMENT '地址',
    15   `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
    16   PRIMARY KEY (`id`)
    17 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    (5.3)常用命令:

    • 通过已经创建的数据库,查看创建数据库的语句
    • 通过已经创建的数据表,查看创建数据表的语句
    1 # 查看创建数据库的SQL语句
    2 SHOW CREATE DATABASE school;
    3 # 查看创建数据表的SQL语句
    4 SHOW CREATE TABLE student;
    5 # 显示表结构
    6 DESC student;
    7 # 设置严格检查模式(不能容错了)
    8 SET sql_mode='STRICT_TRANS_TABLES';

     

    (6)修改数据库中的表

    (6.1)格式:

    • 添加字段 :
      • ALTER TABLE 表名 ADD 字段名 列属性[属性]
    • 删除字段 :
      • ALTER TABLE 表名 DROP 字段名
      修改表名 :
      • ALTER TABLE 旧表名 RENAME AS 新表名
      修改字段 :
      • ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
      • ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列类型[属性]

    注:

    • change:一般只用于修改表的列名,这里修改了列类型可能出错,当赋值了varchar类型后不能转换为int类型

    • modify:用于修改表的列类型和列属性/列约束

    (6.2)案例:

     1 -- 增加表的字段
     2 ALTER TABLE teacher ADD age INT(3)
     3 
     4 -- 删除表的字段
     5 ALTER TABLE teacher DROP age1
     6 
     7 -- 修改表名
     8 ALTER TABLE student RENAME AS teacher
     9 
    10 -- 修改表的字段(修改约束,重命名)
    11 ALTER TABLE teacher MODIFY age VARCHAR(11) -- 修改约束(用于修改表的列类型和列属性/列约束)
    12 ALTER TABLE teacher CHANGE age age1 INT(1) -- 重命名(一般只用于修改表的列名,这里修改了列类型可能出错,当赋值了varchar类型后不能转换为int类型)

     

    (7)删除数据库中的表

    (7.1)格式:

    1 DROP TABLE [IF EXISTS] 表名

    (7.2)案例:

    -- 删除表
    DROP TABLE [IF EXISTS] teacher

    注:当表不存在时,如果不写if exists会报错

     

    (8)查看数据库表的结构

    1 -- 查看表的结构
    2 DESCRIBE teacher
    3 -- 简写
    4 DESC teacher 

     

    3.操作数据库中表的数据

    (1)外键

    (1.1)外键概念

    • 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表
    • 在实际操作中,将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值(在必要时可包括复合主键值)。此时,第二个表中保存这些值的属性称为外键(foreign key)。
    • 注意:
      • 外键不要一定是另一个表的主键,但必须是唯一性索引。
      • 主键约束和唯一性约束都是唯一性索引。

    (1.2)外键作用

    • 保持数据一致性完整性,主要目的是控制存储在外键表中的数据,约束。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。

    (1.3)创建外键

    • 方式一:建表时指定外键约束
    • 方式二:建表后修改外键约束

    (1.3.1)建表时指定外键约束

    • 创建年级表,然后在创建学生表,年级表中的id为学生表年级的外键。

    • 其中关键为:声明外键和指定约束 KEY `FK_gradeid` (`gradeid`), CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`) 
    • 注意:删除主表grade时必须先删除与它相关的从表,然后再删除主表。
     1 # 年级表(id年级名称)
     2 CREATE TABLE `grade` (
     3   `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
     4   `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
     5   PRIMARY KEY (`gradeid`)
     6 ) ENGINE=INNODB DEFAULT CHARSET=utf8
     7 
     8 # 学生信息表
     9 #(学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
    10 
    11 CREATE TABLE `student` (
    12   `studentno` INT(4) NOT NULL COMMENT '学号',
    13   `studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
    14   `sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
    15   `gradeid` INT(10) DEFAULT NULL COMMENT '年级',
    16   `phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
    17   `address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
    18   `borndate` DATETIME DEFAULT NULL COMMENT '生日',
    19   `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    20   `idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
    21   PRIMARY KEY (`studentno`),
    22   KEY `FK_gradeid` (`gradeid`),
    23   CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
    24 ) ENGINE=INNODB DEFAULT CHARSET=utf8

    (1.3.2)建表后修改外键约束

    • 先建立年级表,再建立学生表,最后绑定外键约束
    • 基本语法:alter table 从表名 add constraint 约束名 foreign key(从表中作为外键的列名) references 主表名(主表中的列名)
    # 年级表(id年级名称)
    CREATE TABLE `grade` (
      `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
      `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
      PRIMARY KEY (`gradeid`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8
    
    # 学生信息表
    #(学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
    
    CREATE TABLE `student` (
      `studentno` INT(4) NOT NULL COMMENT '学号',
      `studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
      `sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
      `gradeid` INT(10) DEFAULT NULL COMMENT '年级',
      `phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
      `address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
      `borndate` DATETIME DEFAULT NULL COMMENT '生日',
      `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
      `idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
      PRIMARY KEY (`studentno`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8
    
    # 创建外键方式二 : 创建子表完毕后,修改子表添加外键
    ALTER TABLE student
    ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);

    以上操作都是物理外键(数据库级别的外键),小型数据库不在乎效率使用物理外键,大型数据库不建议这么使用!

    大型数据库最佳实践:

    • 数据库就是单纯的表,只用来存储数据,只有行(记录)和列(字段)
    • 我们想使用多张表的数据,想使用外键则通过程序去实现

    (1.4)删除外键

    (1.4.1)删除主表:需要先删除具有外键的从表,再删除主表

    (1.4.2)删除从表的外键约束:先删除从表的外键,再删除从表的索引

    1 # 删除外键
    2 ALTER TABLE student DROP FOREIGN KEY FK_gradeid;
    3 # 发现执行完上面的,索引还在,所以还要删除索引
    4 # 注:这个索引是建立外键的时候默认生成的
    5 ALTER TABLE student DROP INDEX FK_gradeid;

    (2)DML语言:(重点)

    (2.1)数据库的意义

    • 数据存储
    • 数据管理

    (2.2)DML语言:数据操作语言

    • 增:insert
    • 删:delete
    • 改:update

    (2.3)增加:insert 

    (2.3.1)语法:

    INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3', ...),('值1','值2','值3', ...), ...

     

    (2.3.2)注意事项:

    • 字段名和值之间都必须用英文逗号隔开
    • 字段名可以省略,但是字段值必须与表结构中的字段值一一对应
    • 可同时插入多条记录,用小括号和逗号隔开

    (2.3.3)用例:

     1 INSERT INTO grade(gradename) VALUES ('大一');
     2 
     3 # 主键自增,那能否省略呢?
     4 INSERT INTO grade VALUES ('大二');
     5 
     6 # 查询:INSERT INTO grade VALUE ('大二')错误代码: 1136
     7 # Column count doesn`t match value count at row 1
     8 
     9 # 得出结论:'字段1,字段2...'该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致.
    10 
    11 # 一次插入多条数据
    12 INSERT INTO grade(gradename) VALUES ('大三'),('大四');

    (2.4)删除:delete

    (2.4.1)语法:

    • delete
      •  DELETE FROM 表名 [WHERE condition]; 
      • 注意 :  condition为筛选条件 , 如不指定则删除该表的所有列数据
    • turncat
      •  TRUNCATE [TABLE] table_name; 
      • 用于完全清空表数据 , 但表结构 , 索引 , 约束等不变 ;

    (2.4.2)注意事项:

    • 相同 : 都能删除数据 , 不删除表结构 , 但TRUNCATE速度更快
    • 不同 :
      • 使用TRUNCATE TABLE 重新设置AUTO_INCREMENT计数器
      • 使用TRUNCATE TABLE不会对事务有影响

    (2.4.3)用例:

     1 # 创建一个测试表
     2 CREATE TABLE `test` (
     3   `id` INT(4) NOT NULL AUTO_INCREMENT,
     4   `coll` VARCHAR(20) NOT NULL,
     5   PRIMARY KEY (`id`)
     6 ) ENGINE=INNODB DEFAULT CHARSET=utf8
     7 
     8 # 插入几个测试数据
     9 INSERT INTO test(coll) VALUES('row1'),('row2'),('row3');
    10 
    11 # 删除表数据(不带where条件的delete)
    12 DELETE FROM test;
    13 # 结论:如不指定Where则删除该表的所有列数据,自增当前值依然从原来基础上进行,会记录日志.
    14 
    15 # 删除表数据(truncate)
    16 TRUNCATE TABLE test;
    17 # 结论:truncate删除数据,自增当前值会恢复到初始值重新开始;不会记录日志.
    18 
    19 # 同样使用DELETE清空不同引擎的数据库表数据.重启数据库服务后
    20 # InnoDB : 自增列从初始值重新开始 (因为是存储在内存中,断电即失)
    21 # MyISAM : 自增列依然从上一个自增数据基础上开始 (存在文件中,不会丢失)

    (2.5)修改:update

    (2.5.1)语法: UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition]; 

    (2.5.2)注意事项:

    • column_name 为要更改的数据列
    • value 为修改后的数据 , 可以为变量 , 具体指 , 表达式或者嵌套的SELECT结果
    • condition 为筛选条件 , 如不指定则修改该表的所有列数据

    (2.5.3)用例:

    1 UPDATE `student` SET `studentname`='小明',`gradeid`= 1 WHERE `studentname`='明明' AND studentno = 1;
    2 UPDATE `student` SET `borndate`= CURRENT_TIME WHERE `studentname`='红红' 

    (2.5.4)where条件字句:可以简单的理解为 : 有条件地从表中筛选数据

    转载:https://www.cnblogs.com/hellokuangshen/p/10250196.html

  • 相关阅读:
    无题..
    让Windows 2003 Server支持ASP程序
    下雪
    比较经典的.NET基础
    XML几种操作
    某年某月有几天
    .NET操作Word(傻瓜型)
    XML 简单操作
    一首歌
    ASP.NET:掌握Web窗体的生命周期与状态管理(摘自网络)
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12254093.html
Copyright © 2011-2022 走看看