您的位置:首页 > 数据库 > MySQL

MySQL学习day01 数据库概述 MySQL基础知识 MySQL表结构的管理

2019-05-29 20:07 597 查看

MySQL

  1. 数据库概述
    1.1 数据管理技术的发展
    人工管理阶段:20世纪50年代中期之前
    文件系统阶段:20世纪50年代末~60年代中
    缺点:数据冗余(重复)
    数据不一致
    数据联系弱
    数据库阶段:
    数据库技术诞生的标志性事件:
    1968年,IBM 推出了 层次型数据库产品 IMS
    1969年,DBTG 发布了一系列报告(数据库及其操作环境的标准的规范)
    1970年,IBM 研究人员 E.F.Codd(科德) 发表了大量论文,首次提出关系型数据库的概念。
    特点:采用复杂的结构化的数据模型
    控制功能:并发控制、数据库的恢复、
    数据的完整性(实体完整性、域完整性、引用完整性、自定义完整性)
    安全性
    系统更为灵活
    信息处理方式不再以程序为中心,而是以数据为中心
    1.2 几个术语
    数据(data):数据库中存储的基本对象,包括文字、图形、图像、声音等
    数据库(Database):长期存储在计算机内,有组织、可共享的大量数据的集合。
    数据库管理系统(DBMS):是位于操作系统和用户之间的一层数据库管理软件。科学的组织和存储数据、高效的获取和维护数据。
    数据库系统(DBS)
    数据库管理员(DBA)

1.3 主流的关系型数据库产品
层次型、网状、关系型、非关系型

关系型:使用二维表保存数据
商业型:
Oracle 甲骨文
DB2 IBM
SQL Server 微软
开源:
MySQL 甲骨文 (2009 甲骨文收购sun公司)
sun (2008 sun 收购 瑞典 MySQL AB)

1.4 SQL语言
SQL(Structured Query Language):结构化查询语言
SQL是在关系型数据库上执行数据操作、检索及其维护所使用的一种标准语言,可以用来查询数据、操作数据、定义数据、控制数据等。
SQL分为:
数据查询语句(DQL): select
用来查询所需要的数据 使用最广泛、语法最复杂
数据操作语句(DML): insert update delete
用于改变数据库表中的数据
数据定义语句(DDL): create alter drop
用于创建、修改、删除数据库对象
事务控制语句(TCL): commit、roolback、savepoint
用来维护数据库中数据的一致性
数据控制语句(DCL): create user、grant、revoke
用于执行用户的创建、权限的授予和回收等

  1. MySQL基础知识
    2.1 MySQL的特点
  1. 性能高效
  2. 跨平台支持
  3. 简单易用
  4. 开源
  5. 支持多用户
    2.2 启动和停止服务
  6. 启动
    service mysql start
  7. 重启
    service mysql restart
  8. 停止服务
    service mysql stop
    2.3 连接MySQL服务器
  9. 语法
    mysql [-h host] [-u username] [-p[pwd]] [dbname] [-P port]
    其中:
    host: 要连接的服务器的IP地址或主机名
    如果连接本机,可以省略 或 localhost 或 127.0.0.1
    username: 登录名
    pwd: 密码 注意:密码和-p之间没有空格
    dbname: 数据库名
    port: 端口号 默认为3306
  10. 示例
    本地连接:
    mysql -u root -p
    mysql -h localhost -u root -p
    mysql -u root -ptarena – 不建议密码写到命令行
    ~~~~ ~~~~~~
    登录名 密码
    mysql -u root -p -P 3306
    mysql -u root -p sys
    ~~~
    数据库名
    远程连接:
    mysql -h 172.40.91.124 -u root -p

2.4 MySQL数据库管理
2.4.1 创建数据库

  1. 语法
    create database 数据库名;
  2. 示例
    创建"选课系统"数据库
    create database choose;

单行注释:
– 注意–后面必须有一个空格
#
多行注释: /* 注释内容 */

2.4.2 查看数据库

  1. 查看所有数据库的名字
    – 语法
    show databases;
  2. 显示数据库结构
    – 语法
    show create database 数据库名;
    – 示例
    show create database choose;
    2.4.3 选择当前数据库
    – 语法
    use 数据库名;
    – 示例
    use choose;
    2.4.4 删除数据库
    – 语法
    drop database 数据库名;
    – 示例
    drop database choose;

2.5 MySQL表管理
2.5.1 创建数据库表

  1. 语法
    create table 表名(
    字段名1 数据类型,

    字段名n 数据类型
    );
  2. 示例
    – 创建数据库 choose
    create database choose;
    – 选择当前数据库
    use choose;
    – 创建表
    create table my_table(
    id int,
    name char(10)
    );
    2.5.2 查看表
  3. 显示当前数据库中的所有表
    show tables;
  4. 查看指定表的详细信息
    show create table 表名;
    – 示例
    show create table my_table;
  5. 查看指定表的表结构
    desc[ribe] 表名;
    – 示例
    desc my_table;
    2.5.3 删除表
  6. 语法
    drop table 表名;
  7. 示例
    drop table my_table;
  1. MySQL表结构的管理
    3.1 MySQL的数据类型
    3.1.1 数值类型 [ol] 整数
    tinyint 1字节
    smallint 2字节
    mediumint 3字节
    int 4字节
    bigint 8字节
    如果需要使用无符号整数,在数据类型后加 unsigned
    如: age tinyint unsigned
  2. 小数
    精确小数:
    decimal(len,p)
    如:salary decimal(7,2) -99999.99~99999.99
    浮点数:
    float: 4字节
    double: 8字节
    3.1.2 字符串
    char(n) 定长字符串 n值最大255
    varchar(n) 变长字符串 n的取值范围和字符集有关
    3.1.3 日期和时间
    date: 3字节 ‘1000-01-01’~‘9999-12-31’ YYYY-MM-DD
    time: 3字节 ‘-838:59:59’~‘838:59:59’ HH:II:SS
    datetime: 8字节 ‘1000-01-01 00:00:00’
    ~‘9999-12-31 23:59:29’
[/ol]

3.2 创建表
3.2.1 语法
create table 表名(
字段名1 数据类型 [约束条件],

字段名n 数据类型 [约束条件]
[,其他约束]
)[其他选项(引擎 默认的字符集等)];
3.2.2 约束的类型

  1. 主键约束 primary key
    非空、唯一
    一个表中只能有一个主键
  2. 唯一约束 unique
    唯一(不允许重复)
  3. 非空约束 not null
  4. 默认约束 default
  5. 检查约束 check – 目前MySQL不支持
    age int check(age>=15 and age<=50)
  6. 外键约束 foreign keyinsert into student values(‘2017001’,‘张三’,‘123456789’);
    references

3.3 约束的实施
3.3.1 主键约束
– 以学生表为例,设置学号为主键
create table student(
stu_no char(11) primary key,
stu_name char(10)
);
– 测试
insert into student values(‘2017001’,‘张三’);
#错误 主键字段的值不允许重复
insert into student values(‘2017001’,‘李四’);
#错误 主键字段的值不允许为null
insert into student values(null,‘张三’);
#错误 一个表中只能有一个主键
create table exam(
exam_date date primary key,
exam_address char(10) primary key,
course_name char(20)
);
– 复合键(组合键)
create table exam(
exam_date date,
exam_address char(10),
course_name char(20),
primary key(exam_date,exam_address)
);
insert into exam values(‘2019-01-04’,‘一教室’,‘高数’);
insert into exam values(‘2019-01-04’,‘阶教一’,‘马克思’);
insert into exam values(‘2019-01-05’,‘阶教一’,‘英语’);
#错误
insert into exam values(‘2019-01-05’,‘阶教一’,‘线代’);

3.3.2 唯一约束
– 学生表中增加身份证号字段,并设置为唯一
drop table student;
create table student(
stu_no char(11) primary key,
name char(10),
uid char(20) unique
);
– 测试
insert into student values(‘2017001’,‘张三’,‘123456789’);
#错误 唯一字段的值不允许重复
insert into student values(‘2017002’,‘李四’,‘123456789’);
– 正确 唯一字段的值允许为null,并且null可以有多个
insert into student values(‘2017003’,‘王五’,null);
insert into student values(‘2017004’,‘赵六’,null);
3.3.3 非空约束
– 学生表 姓名字段设置为非空
drop table student;
create table student(
stu_no char(11) primary key,
stu_name char(10) not null
);
– 测试
#错误 非空字段不允许为null
insert into student values(‘2017001’,null);

3.3.4 默认约束
– 学生表 增加班级字段,并且设置默认约束
drop table student;
create table student(
stu_no char(11) primary key,
stu_name char(10) not null,
class_name char(20) default ‘csd1902’
);
– 测试
– 使用默认值
insert into student values(‘2017001’,‘张三’,default);
insert into student(stu_no,stu_name)
values(‘2017002’,‘李四’);
– 不使用默认值
insert into student values(‘2017003’,‘王五’,‘csd1812’);
insert into student values(‘2017004’,‘赵六’,null);

一个字段设置多种约束,顺序任意
如: 字段名 数据类型 not null unique

字段名 数据类型 unique not null

3.3.5 外键约束

  1. 概念
    外键约束用于定义表之间的关系
    主表(父表) :提供数据的表
    从表(子表) : 外键所在的表
    外键字段的值必须来自于主表中的对应字段 或者为空

  2. 语法
    constraint 约束名 foreign key(外键字段)
    references 主表(字段)
    外键引用的主表中的字段必须是唯一性字段,一般使用主键

  3. 示例
    学生表:学号、姓名、班级编号
    班级表:班级编号 班级名称
    drop table student;
    – 创建表 (先创建主表,然后再创建从表)
    create table classes(
    c_no int primary key,
    c_name char(20)
    );
    create table student(
    stu_no char(11) primary key,
    stu_name char(10) not null,
    c_no int,
    constraint classes_student_fk foreign key(c_no)
    references classes(c_no)
    );
    – 测试
    – 向主表中插入测试数据
    insert into classes values(1,‘csd1902’);
    insert into classes values(2,‘csd1903’);
    – 向从表中写入数据
    insert into student values(‘2017001’,‘张三’,1);
    insert into student values(‘2017002’,‘李四’,2);
    insert into student values(‘2017003’,‘王五’,null);
    #错误 违反了外键约束,主表中不存在班号为3的数据
    insert into student values(‘2017004’,‘赵六’,3);

-- 删除表  先删除从表 再删除主表
drop table student;
drop table classes;

3.4 设置自增长字段

  1. 语法
    字段名 数据类型 auto_increment
    自增长字段的数据类型必须是整型,并且设置为主键
  2. 示例
    – 创建班级表,设置班号为自增长
    create table classes(
    c_no int auto_increment primary key,
    c_name char(20) not null
    );
    – 向表中写入数据
    insert into classes values(null,‘csd1902’);
    insert into classes(c_name) values(‘csd1903’);

3.5 创建"选课系统"数据库

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: