初识MySQL

1、MySQL的语法格式

      MySQL中特殊符号:反引号 ``,用于区分关键字和普通字符使用(比如:order 关键字,可以作为订单表名),是MySQL特有,Oracle数据库没有(反引号在主键盘数字1前面,Tab键上面)

      MySQL中,每条SQL语句,都是以 ; 结尾,代表当前语句执行结束,跟Java类似

2、删除数据库

drop database if exists `kq02_db`;

3、创建数据库
create database if not exists `kq02_db`;

选中上述命令右击并执行运行可以看到如下所示显示执行OK,

而后右击所在数据库库执行刷新命令就可以看到所创建的库,

双击所创建的数据库,前面的图标变成绿色说明已经连上了这个数据库,

在新生成的库中new一个Querise(查询)将之前命令复制到此处ctrl+s进行保存,弹出如下所示窗口,为新建的查询取名后,这个查询就能长久保存

## 在工具一栏选择选项再选择编辑器可以修改注释,背景等的颜色

4、切换数据库(使用数据库),作用:将切换数据库后的所有SQL语句,都是在当前指定数据库内执行
use `kq02_db`;

5、建表之前,必须先选择表存放的数据库,否则无法创建

6、删除表
语法:drop table [if exists] `表名`;
drop table if exists `kq02_user`;(if exists 省略后会出现报错,加上if exists 后若没有表kq02_user则进行创建,若有便不会创建也不会报错)

7、创建表
  CREATE   TABLE [ IF NOT EXISTS ]    `表名`   (
       `字段名1`   列类型 [ 属性 ]  [ 索引 ] [注释] ,
       `字段名2`   列类型 [ 属性 ]  [ 索引 ] [注释] , 
        … …  ,  
        `字段名n`  列类型 [ 属性 ]  [ 索引 ] [注释] 
)  [  表类型 ] [ 表字符集 ] [注释];

     细节1:同一个数据库中,表名是唯一的,但是不同数据库中,表名是可以重复的

     细节2:建库,建表和字段,如果存在多个单词,不建议使用驼峰命名,统一使用 _ 进行分隔,不允许出现名称全是数字,且不能使用空格

     细节3:建表中,列字段的声明,都是在小括号中,不是大括号,每个列的声明后,以逗号(英文)结尾,最后一列声明后,不需要加逗号(只要有逗号,后面就要有声明)

     细节4:建表中,列字段声明的顺序,一般是:`字段名` 列类型 [ 属性 ]  [ 索引 ] [注释] ,中间使用空格分隔,其中:`字段名` 列类型是必须,不可以省略

create table if not exists `kq02_user`(
    `id` int comment '
编号',
    `name` varchar(
10) comment '姓名',
    `age` tinyint comment '年龄'
) comment '用户表';

8、查看已有表结构
 方式1:通过Navicat,表名右击,选择设计表
 方式2:没有Navicat,只能命令行操作,使用desc命令
desc `kq02_user`;

9、查看已有表的建表语句

show create table `kq02_user`;

10、声明列类型

        作用:指定当前表中,指定列能存储数据的类型,一旦类型确定,当前列存放的数据就必须是指定类型值

        分类:数值类型,字符串类型,日期类型,null类型,其它类型(枚举,text,blob等)

11、 数值类型

        11.1、 整数类型:tinyint, int, bigint

        细节:一般声明整数类型字段,不需要指定小括号中的长度值,值的范围是整数类型确定的,根小括号中指定数值大小无关
        比如:tinyint(2),取值范围是:-128 ~~ 127,而不是-99 ~~ 99
        小括号作用:小括号中指定的数值,代表整数的显示长度,一般配合补零属性使用,才会生效
        比如:tinyint(2) 指定补零属性,如果给定值是2,显示值是02
drop table if exists `kq02_int`;
create table if not exists `kq02_int`(
    `id` bigint,
    `age` tinyint(2), 
    `num` int
);

       11.2、 浮点类型:double(M, D),其中M-精度,D-标度,M=整数位+小数位,D=小数位

       比如:double(5,2),代表整数位3位,小数位2位,取值范围为:-999.99~~999.99
 MySQL底层进行数据存储时,选用的方案:
 如果整数部分超出范围,直接报错,不允许存入,比如:1000.22
 如果小数部分,超出范围,会进行特殊处理:
 1)如果四舍五入后,整数部分,没有超出范围,可以正确存储,并执行四舍五入操作,删除多余小数位,比如:999.029,入库值:999.03
 2)如果四舍五入后,整数部分,超出范围,直接报错,并拒绝存入数值,比如:999.996,存入会报错,超出范围,入库失败
 细节:涉及金额存储,类型不推荐使用double,存储存在精度问题,MySQL中存放的是近似值,可能导致精度不准确
drop table if exists `kq02_double`;
create table if not exists `kq02_double`(
    `price` double(5, 2) 
);

       定点数类型,字符串形式的浮点数:decimal(M, D),M-精度,D-标度,D不能大于M,默认D=0
       细节:定点数类型,精度是准确的,没有误差,MySQL底层是使用字符串,避免了double类型数据出现运算精度不准确问题
       建议:如果项目中,涉及带精度的金额计算,推荐使用decimal类型,精度要求很高。(有时候,金额可以用整数代替,代表分,不是元)
drop table if exists `kq02_decimal`;
create table if not exists `kq02_decimal`(
    `price` decimal(5, 2) 
);

12、字符串类型

       12.1、 定长字符串类型:char(M),指定字符串固定长度M,一般M的取值范围:1-255
       细节:可以存储小于或者等于声明长度的字符串,但是如果小于指定长度,会自动在末尾填充空格,补全完整长度,会额外占用空间。当MySQL检索时,会自动去除末尾填充的空格。
       建议:一般都是在长度固定字段上,使用char类型,比如:性别,状态,手机号等
drop table if exists `kq02_char`;
create table if not exists `kq02_char`(
    `state` char(2) 
);

        12.2、可变字符串类型:varchar(M),指定字符串类型的最大长度M,必须要指定,否则报错
        细节1:可以存储小于或者等于声明长度的字符串,但是如果超出了范围,会报错,且不会自动扩容。
       细节2:varchar的最大长度是65535个字节,但是表声明字符集,对长度有影响
 如果是utf8字符集,每个字符占3个字节,最大长度是:65535/3=21845,如果是utf8mb4字符集,每个字符占4个字节,最大长度是:65535/4=16383
drop table if exists `kq02_varchar`;
create table if not exists `kq02_varchar`(
    #`name` varchar(5) 
    `content` varchar(16383) 
);

13、日期类型

        日期或者时间类型注意有:YEAR, DATE, TIME, DATETIME, TIMESTAMP
# YEAR 类型通常用来表示年,在所有的日期时间类型中所占用的存储空间最小,YEAR默认格式就是“YYYY”,没必要写成YEAR(4)
# DATE 类型通常用来表示年、月、日,没有时间部分,格式为 YYYY-MM-DD ,其中,YYYY表示年份,MM表示月份,DD表示日期。
# TIME 类型通常用来表示时、分、秒,使用“HH:MM:SS”格式来表示TIME类型,其中,HH表示小时,MM表示分钟,SS表示秒。
# DATETIME 类型通常用来表示年、月、日、时、分、秒,YYYY-MM-DD HH:MM:SS ,其中YYYY表示年份,MM表示月份,DD表示日期,HH表示小时,MM表示分钟,SS表示秒
# 以 YYYY-MM-DD HH:MM:SS 格式或者 YYYYMMDDHHMMSS 格式的字符串插入DATETIME类型的字段时,最小值为1000-01-01 00:00:00,最大值为9999-12-31 23:59:59
# TIMESTAMP 类型通常用来表示带时区的年、月、日、时、分、秒,显示格式与DATETIME类型相同,都是 YYYY-MM-DD HH:MM:SS
# 但是TIMESTAMP存储的时间范围比DATETIME要小很多,只能存储“1970-01-01 00:00:01 UTC”到“2038-01-19 03:14:07 UTC”之间的时间,中国东八区,加8小时
# 存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同的时区查询时会显示不同的时间。
drop table if exists `kq02_dt`;
create table if not exists `kq02_dt`(
        `create_time` datetime comment '创建时间'
); 

14、 声明列的属性
# 1 UNSIGNED : 无符号类型(非负),代表值不能为负数,最小值是0
# 2 ZEROFILL : 0填充,代表不足指定长度的整数类型值,左侧自动使用0进行补全
# 3 AUTO_INCREMENT:自增,一般都是配合主键使用,默认自增起始值是1,每次在前一次基础上加1,也可以自定义,一张表只允许有一个自增属性列,且一旦设置自增,就不需要指定默认值
# 4 NOT NULL:非空,NULL:空,默认列不指定,就是允许为空(null),如果不允许为空,就必须指定not null属性,一旦指定,改列就不能存null值
# 5 DEFAULT:默认值,一般都是给非空列,添加默认值,防止非空列没有给定具体值,导致数据添加失败,自动使用默认值填充,比如:默认密码
# 细节:一列只有一个类型,但是可以同时有多个属性,每个列属性声明的顺序没有要求的,注意使用空格隔开

15、声明列的索引
# PRIMARY KEY:主键索引,一旦指定列为主键,自带特性:非空且唯一,通常配合AUTO_INCREMENT使用,自增主键
# 。。。。。。

16、声明列的注释
# COMMENT '字段注释',一般都是写在列或者表声明最后,给字段或者表增加注释说明,方便后来者查看表

 完整建表示例:
drop table if exists `kq02_order`;
create table if not exists `kq02_order`(
    `id` bigint auto_increment primary key comment '主键id',
    `status` char(1) not null default '0' comment '状态',
    `prod_name` varchar(50) comment '商品名称',
    `count` int(3) unsigned zerofill comment '显示数量',
    `total_price` decimal(10, 2) comment '订单总价',
    `create_time` datetime default now() comment '下单时间',
    `pay_time` timestamp comment '支付时间'
) comment '订单表';

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值