数据库定义
语法形式
(1)创建数据库
  create database [if not exists ] 数据库名 [charset 字符集] [collate 字符排序规则];
  if not exists:用于判断是否存在该数据库名,如果存在则不执行该语句

create database if not exists z_0705;

  Show charset :查看字符集
  Show collate :查看排列规则
(2)修改数据库
  alter database 数据库名 character set=新字符集 collate=新校对

alter database z_0705 character;

(3)删除数据库:
  drop database 数据库名;

drop database z_0705;

表定义语句
  1)字段属性设置
    not null: 不为空,表示该字段不能放“null”这个值。不写,则默认是可以为空
    auto_increment: 设定int类型字段的值可以“自增长”,即其值无需“写入”,而会自动获得并增加
    此属性必须随同 primary key 或 unique key 一起使用。
    [primary] key: 设定为主键。是唯一键“加强”:也不能重复并且不能使用null,并且可以作为确定任意一行数据的“关键值”,最常见的类似:where id= 8; 或 where         user_name =   ‘zhangsan’;
    通常,每个表都应该有个主键,而且大多数表,喜欢使用一个id并自增长类型作为主键。
    但:一个表只能设定一个主键。
    unique [key] : 设定为唯一键:表示该字段的所有行的值不可以重复(唯一性)。
    default ‘默认值’: 设定一个字段在没有插入数据的时候自动使用的值。
    comment ‘字段注释’:
  2)索引设置
    什么是索引:
    索引是一个“内置表”,该表的数据是对某个真实表的某个(些)字段的数据做了“排序”之后的存储形式。
    其作用是:极大提高表查找数据的速度!——其效率(速度)可以匹敌二分查找。
    注意:索引在提供查找速度的同时,降低增删改的速度。
    对创建(设计)表来说,建立索引是非常简单的事,形式如下:
    索引类型 (字段名1,字段名2, .... ) //可以使用多个字段建立索引,但通常是一个
    有以下几种索引:
    普通索引:key(字段名1,字段名2, .... ):它只具有索引的基本功能——提速
    唯一索引:unique key (字段名1,字段名2, .... )
    主键索引:primary key (字段名1,字段名2, .... )
    全文索引:fulltext (字段名1,字段名2, .... )
  3)约束设置
    什么叫约束:约束就是一种限定数据以符合某种要求的形式(机制)
    约束主要有:
    主键约束:primary key (字段名1,字段名2, .... )
    其实就是主键索引,也是主键属性。即primary key有3个角度的理解(说法):字段属性设置为主键,或建立的主键索引,或设定一个主键约束,但他们的本质是一样
    唯一约束:unique key (字段名1,字段名2, .... ),其实也是“3体合一”(类似primary key)
    外键约束:
    什么叫外键:就是设定一个表中的某个字段的值,必须“来源于”另一个表的某个主键字段的值。
    语法形式:
    foreign key (字段名1,字段名2, .... ) references 表名2(字段名1,字段名2, .... )
    说明:
    对某个(些)字段设定外键,则其相对应的其他表的对应字段需要设置为主键。
  4)表选项
    表选项就是对一个表的有关属性的设定,通常都不需要。如果不设定,则有其默认值。
    有以下几个可用:
    comment = ‘表的注释’;
    charset = 字符编码名称; //跟数据的字符编码设定一个意思。
    字符编码设定的范围及继承关系:
    系统级设定:安装时确定了。
    库级设定:建库时设定;
    表级设定:就是这里的charset = 字符编码名称
    字段级设定:作为字段属性出现。
    他们都只对“字符类型”的字段有效。每一级如果没有设定,就会“继承使用”其上一级的设定。
    auto_increment = 起始整数; //自增长类型值的初值,默认是1
    engine = “表的存储引擎名”; //
    存储引擎就是将数据存入硬盘(或其他媒介)的方式方法。通常就几个可用,默认是InnoDB
    存储引擎决定一个数据表的各方面的信息:功能和性能。
(1)创建表
    create table [if not exists] 表名(字段列表, [约束或索引列表]) [表选项列表];
    说明:列表都是表示“多个”,相互之间用逗号分开。
    字段基本形式: 字段名 类型 [字段修饰属性];

create table student(
sno varchar(20) not null comment'学号',
sname varchar(20) not null comment '学生姓名',
ssex varchar(20) not null comment '学生性别',
sbirthday datetime comment '学生出生年月',
class varchar(20) comment '学生所在班级',
primary key(sno)
);

(2)修改表:
  一般概述
    通常,创建一个表,能搞定(做到)的事情,修改表也能做到。大体来说,就可以做到:
  增删改字段:
  增:alter table 表名 add [column] 字段名 字段类型 字段属性;
  删: alter table 表名 drop 字段名
  改:alter table 表名 change 原字段名 新字段名 新字段类型 新字段属性;
  增删索引:
  增删约束:
  修改表选项:
(3)删除表:
  drop table [if exists] 表名;

drop table student;

数据操作语言(DML)
  数据库设计3范式(3NF):
    范式,就是规范,就是指设计数据库需要(应该)遵循的原则。
    每个范式,都是用来规定某种结构或数据要求——后一范式都是在前一范式已经满足的情况用来“加强要求”
    1)第一范式(1NF),原子性
      原子性: 存储的数据应该具有“不可再分性”。
    2)第二范式(2NF)唯一性
      需要实现每一行数据具有唯一可区分的特性,并不能有部分依赖关系。
      通常,给一个表加主键(也是推荐做法),就可以做到“唯一可区分”。
      但主键有这样情况:
      设定一个字段为主键:此时,表示该一个字段的值就可以明确确定一行数据。
      设定多个字段为主键:表示只有这多个字段的值都确定后才能确定一行数据。此时也称为“联合主键”
      什么叫依赖:
      如果确定一个表中的某个数据(A),则就可以确定该表中的其他另一个数据(B),则我们说:B依赖于A。
      实际上,一个表只要有主键,则其他非主键一定是依赖于主键的。

      什么叫“部分依赖”:
      如果确定一个表中的某个数据组合(A,B),则就可以确定该表中的其他另一个数据(C),则我们说:C依赖于(A,B)(此时A,B通常就是做出主键)。
      但:如果某个数据D,它只依赖于数据A,或者说,A一确定,则D也可以确定,此时我们就称为“数据D部分依赖于数据A——可见部分依赖是指某个非主键字段,
      依赖于联合主键字段的其中部分字段。
    3)第三范式(3NF):独立性,消除传递依赖
      在一个具有主键的表中,假设主键为A,其必然其他非主键都依赖于该主键,比如:B依赖于A,C依赖于A,D依赖于A。。。。。。
      但同时:如果该表中的某个字段B的值一确定,就能够确定另一个字段的值C,则我们称为C依赖于B。
      那么,就出现了:
      C依赖B,B依赖A——这就是传递依赖。
      则消除该传递依赖的的通常做法,就是将C依赖于B的数据,分离到另一个表中。
(1)数据插入(添加数据)
    有3种形式
    形式1:
    insert into 表名(字段名1,字段名2,....) values (值a1,值a2, .....), (值b1,值b2, .....),..... ;
    形式2:
    insert into 表名1(字段名1,字段名2,....)select 字段名1,字段名2,.... from 表名2;
    形式3:
    insert into 表名 set 字段名1=值1,字段名2=值2, ..... ;

insert into student values
('100','李华','男','1977-09-01','95033');
('108','曾华','男','1977-09-01','95033'),
('105','匡明','男','1975-10-02','95031'),
('107','王丽','女','1976-01-23','95033'),
('101','李军','男','1976-02-20','95033'),
('109','王芳','女','1975-02-10','95031'),
('103','陆君','男','1974-06-03','95031');

(2)删除数据
    基本语法形式:
    delete from 表名 [where条件] [order排序] [limit限定];

delete from student where sname="王丽";

(3)修改数据
    基本语法:
    update 表名 set 字段名1=值表达式1,字段名2=值表达式2,....[where条件] [order排序] [limit限定];

uodate student set sname="王丽" where ssex="女";

最新文章

  1. AngularJS实例实战
  2. KeySpaceNotification 键空间通知
  3. 单页面实现之hash
  4. 用CAShapeLayer实现一个简单的饼状图(PieView)
  5. VUE 入门基础(2)
  6. 【转载】java版打字练习软件
  7. PostgreSQL的注释嵌套的例子
  8. 批量更新memcached缓存
  9. Hadoop集群错误
  10. AnyChartStock去除水印方法
  11. UVA1395
  12. python bisect模块
  13. Hibernate过程小计
  14. 单片机 认识HEX文件
  15. LeetCode OJ 26. Remove Duplicates from Sorted Array
  16. Azure 基础:Table storage
  17. MYSQL 数据库高频查询语句整理
  18. HDU 3944 DP? [Lucas定理 诡异的预处理]
  19. webpack 单独打包指定JS文件(CopyWebpackPlugin)
  20. 开发自己的react-native组件并发布到npm[转]

热门文章

  1. (22)打鸡儿教你Vue.js
  2. C Primer Plus--结构和其他数据类型(1)
  3. Mybatis 通用Mapper增强
  4. P1016 旅行家的预算——贪心
  5. 坑:pytest 运行报错unknown hook 'pytest_namespace' in plugin <module 'allure.pytest_plugin'
  6. HTML Entity
  7. Control.ImeMode属性简释
  8. PLSQL命令行创建用户 以及 JDBC简单操作
  9. Authentication failure. Retrying - 彻底解决vagrant up时警告
  10. 多个请求共用一个Servlet(JavaWEB)