MySQL字段类型和数据库约束方法

MySQL安装与配置
本文详细介绍MySQL的安装步骤,包括环境变量设置、系统服务创建、密码修改及文件配置。此外,还深入探讨了数据库字段类型的使用,如整型、浮点型、字符类型等,以及各种约束条件的应用,如PRIMARY KEY、FOREIGN KEY、NOT NULL等。

安装mysql:

解压之后终端切换到bin目录下
启动服务端mysqld

启动客户端mysql -h'127.0.0.1' -P3306 -uroot -p
初次以管理员身份登录无需密码直接回车即可

将bin目录路径添加到环境变量中

将mysqld制作成系统服务

查找:tasklit |findstr mysqld
杀死:taskkill /F /PID '当前mysqld的进程号'

mysqld --install;

windows+r   services.msc

密码修改和文件配置:

mysql -uroot -p

show databases;

修改密码
mysqladmin -uroot -p'原密码' password'新密码';

忘记密码  》》》破解密码
1.先关闭mysqld服务
2.在终端通过命令手动重启mysqld服务让它取消验证校验功能
    mysqld --skip-grant-tables

3.mysql -uroot -p
4.update mysql.user set password=password('123') where user='root' and host= 'localhost';
    立即刷新当前更新
    flush privileges;
5.将当前mysqld服务关闭
6.让服务端以正常校验用户名和密码的方式正常启动

统一字符编码
\s查看当前mysql默认的一些字符编码
修改配置文件:mysql在启动会自动去mysql应用程序的文件中查找my.ini的配置文件
配置不需要去研究直接拷贝即可,只需要知道每一个配置代表的意思及作用范围即可

# 如果想让配置文件生效,需要重启服务端
\s

在配置文件
[mysql]
user = 'root'
password = 123

# 先重启

再次登录只需要mysql

 

创建表的完整语法:
#语法:
    create table 表名(
    字段名1 类型[(宽度) 约束条件],
    字段名2 类型[(宽度) 约束条件],
    字段名3 类型[(宽度) 约束条件]
    );

# 在创建表的时候有三点你需要注意的地方
    1.在一张表内字段名不能重复
    2.字段和类型是必须要有的,而宽度和约束条件是可选的
    3.最后一个字段后面不能加逗号!!!

# 宽度:对存储数据的限制
create database day38;
use day38;
create table t1(name char);
insert into t1 values('jason');
    # 1.能够成功但是显示的时候只显示一位
    # 2.第二种情况,直接报错
select * from t1;

# 约束条件
create table t2(name char(16) not null);

# 字段类型与约束条件之间的关系
    字段类型限制的是存储数据的类型
    约束条件是基于字段类型之上的附加的额外限制

数据库字段类型:

整型:int

浮点型:float < double < decimal

字符类型:char varchar

日期类型:date(年月日),time(时分秒),datetime(年月日时分秒),year(年)

枚举和集合类型:enum(枚举),set(集合)

整型
    分类:TINYINT SMALLINT MEDIUMINT INT BIGINT
    作用:年龄,等级等信息
    TINYINT 默认有正负号
    create table t3(id tinyint);


create table t4(id tinyint unsigned);


int类型
        create table t5(id int);
        alter table t5 modify id int unsigned;


# 给整型设置宽度   特例:唯独整型字段在设置宽度的时候,限制不是存储宽度而是显示宽度
create table t6(id int(8)); # 如果存入的数字够8位 正常显示,如果不够8位默认用空格填充


create table t7(id int(8) zerofill);

特例:唯独整型字段在设置宽度的时候,限制不是存储宽度而是显示宽度
在创建整型字段的时候,不需要指定字段宽度(整型的显示宽度)

mode
like模糊查询
%:匹配任意数量的任意字符
_:匹配单个数量的任意字符
show variables like "%mode%";

# 设置严格模式
set session:当前窗口下有效
set global:全局有效,终生受用!
set global sql_mode = "STRICT_TRANS_TABLES";
# 设置完成后需要退出客户端,重新登录客户端即可,不需要重启服务端
浮点型
    分类:
        float
        double
        decimal
    作用:薪资,体重,身高
    浮点类型(5,3)  # 总长度为5位其中小数位占3位整数位两位
        float(255,30)
        double(255,30)
        decimal(65,30)
    三者区别:
        精度不同:
            精度由低到高
                float
                double
                decimal

    create table t10(id float(255,30));
    create table t11(id double(255,30));
    create table t12(id decimal(65,30));

    insert into t10 values(1.111111111111111111111111111111);
    insert into t11 values(1.111111111111111111111111111111);
    insert into t12 values(1.111111111111111111111111111111);

 

字符类型
    char:定长
    varchar:变长

create table t13(name char(4));  # name字段固定存储四个长度,如果超了直接报错,如果不够默认用空格填充
create table t14(name varchar(4)); # name字段如果超了直接报错,如果不够按实际长度存储

insert into t13 values('a');  'a    '
insert into t14 values('a');  'a'

char_length(name) # 统计字段值所对应的长度
select char_length(name) from t13;
select char_length(name) from t14;

# 这个是修改操作
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";


char VS varchar
char(4) 定长
优点:存取速度都快,简单粗暴
缺点:浪费空间
egonjxx lxx ow

varchar(4) 变
给varchar类型的数据自动加上报头用来标识数据的长度
报头通常占1~2bytes
缺点:存取速度都慢
优点:节省空间
1bytes+egon1bytes+jxx1bytes+lxx1bytes+oow
日期类型
    date 年月日
    time 时分秒
    datetime 年月日时分秒
    year    年
create table t15(
            id int,
            birth date,
            class_time time,
            reg_time datetime,
            yy year
            );
insert into t15 values(1,"2000-01-21","11:11:11","2019-01-21 11:11:11","2019");
枚举与集合
枚举(enum):多选一
create table t16(
    id int,
    name char(6),
    gender enum('male','female','others')
);
insert into t16 values(1,'egon','xxx');

集合(set):多选多 虽然是多选多但是你可以只选一个
create table t17(
    id int,
    name char(6),
    gender enum('male','female','others'),
    hobby set('read','DJ','DBJ','run')
);
insert into t17 values(1,'tank','male',"read,DBJ,DJ");
insert into t17 values(1,'tank','male',"DBJ");

数据库约束方法:

约束条件
"""
PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK)    标识该字段为该表的外键
NOT NULL    标识该字段不能为空
UNIQUE KEY (UK)    标识该字段的值是唯一的
AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT    为该字段设置默认值

UNSIGNED 无符号
ZEROFILL 使用0填充
"""

not null:限制字段不能为空
create table t20(id int,name char(4) not null);

default:设置字段默认值
create table t21(
    id int,
    name char(4),
    gender enum('male','female','others') default 'male'
);
insert into t21 values(1,'egon');  # 报错
insert into t21(id,name) values(1,'egon');

通常情况下not null和default是配合使用的



unique
某个字段对于的值在当前表中是唯一的
# 单列唯一

create table t22(
	id int unique,  # 单个字段
    name char(16)
);
insert into t22 values(1,'egon'),(1,'tank');

服务器ip和port

# 联合唯一

create table t23(
    host char(16),
    port int,
    unique(host,port)  # 多个字段
);
insert into t23 values('127.0.0.1',8080),('127.0.0.1',8081);
insert into t23 values('127.0.0.1',8080),('127.1.1.1',8080);
insert into t23 values('127.0.0.1',8080),('127.0.0.1',8080);



primary key
主键
单从限制条件上来说,它就相当于not null + unique非空且唯一
create table t26(
            id int primary key,
          name char(16)
    )engine=innodb;

innodb引擎中,所有的表都必须有且只有一个主键,它是innodb引擎用来组织数据的依据

强调(******):
    1.一张表中必须有且只有一个主键,如果你没有设置主键,
    那么会从上到下搜索直到遇到一个非空且唯一的字段自动将其设置为主键

```
create table t25(
    id int,
      name char(16),
      age int not null unique,
      addr char(16) not null unique
)engine=innodb;
desc t25;
```

   2.如果表里面没有指定任何的可以设置为主键的字段,那么innodb会采用自己默认的一个隐藏字段作为主键,隐藏意味着你在查询的时候无法根据这个主键字段加速查询了
        索引:类似于书的目录,没有主键就相当于一页一页翻着查

```
3.一张表中通常都应该有一个id字段,并且通常将改id字段作成主键
```



auto_increment:自增

create table t27(
	id int primary key auto_increment,
  name char(16)
);

# 联合主键

create table t28(
    ip char(16),
    port int,
    primary key(ip,port)
);
desc t28;


#  primary key+auto_increment


# 单从约束角度来说primary key就等价于not null unique
create table t11(id int primary key);
desc t11;
insert into t11 values(1),(1);  # 报错
insert into t11 values(1),(2);

# 除了约束之外,它还是innodb引擎组织数据的依据,提升查询效率
"""
强调:
1.一张表中必须有且只有一个主键,如果你没有设置主键,那么会从上到下搜索直到遇到一个非空且唯一的字段自动将其设置为主键
"""
create table t12(
	id int,
  name char(16),
  age int not null unique,
  addr char(16) not null unique
)engine=innodb;
desc t12;
"""
2.如果表里面没有指定任何的可以设置为主键的字段,那么innodb会采用自己默认的一个隐藏字段作为主键,隐藏意味着你在查询的时候无法根据这个主键字段加速查询了
索引:类似于书的目录,没有主键就相当于一页一页翻着查
3.一张表中通常都应该有一个id字段,并且通常将改id字段作成主键
"""
# 联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键
create table t18(
	ip char(16),
  port int,
  primary key(ip,port)
);
desc t18;

# 主键id作为数据的编号,每次最好能自动递增
create table t13(
	id int primary key auto_increment,
  name char(16)
);
insert into t13(name) values ('jason'),('jason'),('jason');  # id字段自动从1开始递增
# 注意:auto_increment通常都是加在主键上,并且只能给设置为key的字段加



补充:

delete from tb1;
强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为0,
所以收该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录
delete from tb1 where id > 10;

如果要清空表,使用truncate tb1;
作用:将整张表重置,id重新从0开始记录

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值