当前位置: 首页 > article >正文

数据库的操作,以及sql之DML

首先,创建表以及插入数据

create table t_text(
    id int primary key auto_increment,
    name varchar(20) unique not null,
    gender char(5) not null check(gender in ("男","女")),
    deed varchar(255) not null default "事例不详"
    );
insert into t_text (id, name, gender, deed) VALUES
(1, '贾宝玉', '男', '荣国府的公子,与林黛玉的爱情故事令人唏嘘。'),
(2, '林黛玉', '女', '才情出众,多愁善感,最终因病早逝。'),
(3, '薛宝钗', '女', '贤淑端庄,最终与贾宝玉成婚。'),
(4, '孙悟空', '男', '齐天大圣,保护唐僧西天取经,神通广大。'),
(5, '唐僧', '男', '取经团队的核心人物,慈悲为怀。'),
(6, '猪八戒', '男', '贪吃懒惰,但也有勇有谋,是孙悟空的得力助手。'),
(7, '沙僧', '男', '忠诚老实,负责挑担和保护唐僧。'),
(8, '刘备', '男', '蜀汉开国皇帝,仁德之君。'),
(9, '关羽', '男', '忠义之士,武艺高强,被尊为武圣。'),
(10, '张飞', '男', '勇猛善战,性格豪爽。'),
(11, '诸葛亮', '男', '蜀汉丞相,智慧过人,被誉为卧龙先生。'),
(12, '宋江', '男', '梁山泊首领,人称及时雨。'),
(13, '林冲', '男', '八十万禁军教头,武艺高强。'),
(14, '武松', '男', '打虎英雄,性格刚烈。'),
(15, '鲁智深', '男', '花和尚,力大无穷,行侠仗义。');

1.数据库约束

1.1主键约束

primary:主键约束

auto_increment:自增属性

一个表中只能有一个主键,主键字段非空且唯一,主键是一个表中唯一确定一行数据的字段。   

当建立主键约束时,MySQL为主键创建对应的索引——主键索引,主键约束名总为PRIMARY。     

主键约束还有一种写法:

create table t_text(
    id int auto_increment,
    name varchar(20),
	primary key(id)
    );

插入数据测试:

insert into t_text values(1,"曹操","男","宁可我负天下人,不可天下人负我");
insert into t_text values(16,"曹操","男","宁可我负天下人,不可天下人负我");
delete from t_text where id = 16;-- 删除id为16的语句

# 因为有auto_increment自增属性,可以写null
insert into t_text values(null,"曹操","男","宁可我负天下人,不可天下人负我");

# 因为存在自增,所以可以这样写
insert into t_text(name,gender,deed) values("华佗","男","在世神医");

测试结果:

代码报错:主键非空且唯一,id为1已经存在,所以报错。

1.2唯一约束

唯一约束的作用,是保证该字段的值是唯一的,值不允许重复。

unique:唯一约束

唯一约束条件确保所在字段或者字段组合不出现重复值

唯一性约束条件的字段允许出现一个NULL
同一张表内可建多个唯一约束
唯一约束可由多列组合而成
建唯一约束时MySQL会为之建立对应的索引——唯一索引。
如果不给唯一约束起名,该唯一约束默认与列名相同。

唯一约束的另一种写法:

create table t_text(
    id int auto_increment,
    name varchar(20),
	primary key(id),
	unique(name)
    );

插入数据测试:

insert into t_text values(null,"曹操","男","宁可我负天下人,不可天下人负我");
insert into t_text values(null,"项羽","男","虞姬的真爱");

测试结果:(在测试主键约束的时候我们已经插入了一条name为"曹操"的数据)

代码报错:已经存在name="曹操"的数据,而name为unique,该值是唯一的,所以该条插入语句报错。

1.3默认值约束

给给定的字段设置默认值

 默认值约束的写法:

create table t_text(
    id int primary key auto_increment,
    name varchar(20) unique,
    deed varchar(255) default "事例不详"
    );

插入数据测试:

# 存在自增,id可以写default
insert into t_text values(default,"刘禅","男","扶不起的阿斗");

# 存在默认值约束,deed可以写成default
insert into t_text values(default,"孙尚香","女",default);

# 可以不写id、deed,id默认自增,deed为默认值
insert into t_text(name, gender) values("孙膑","男");

测试结果: 

1.4非空约束

不允许字段的值为空

create table t_text(
    id int primary key auto_increment,
    name varchar(20) unique not null,
    gender char(5) not null,
    deed varchar(255) not null default "事例不详"
    );

插入数据测试:

# id、deed,都有默认值
insert into t_text(name, gender) values("赵云","男");

# gender存在非空约束,又没有默认值约束,这里没有gender会报错
insert into t_text(name,deed) values("马超","西凉猛将,曾与张飞大战不分胜负,后归顺刘备。");

# gender存在非空约束,又没有默认值约束,这里没有gender会报错
insert into t_text(gender) values("黄忠");

测试结果:

1.5检查约束

:检查约束在MySQL8之前是不生效的,当然也不报错

create table t_text(
    id int primary key auto_increment,
    name varchar(20) unique not null,
    gender char(5) not null check(gender in ("男","女")),
    deed varchar(255) not null default "事例不详"
    );

插入数据测试:

# gender的值只能为"男"或者"女"
insert into t_text values(null,"貂蝉","美女","以连环计离间董卓与吕布,促成董卓覆灭。");

insert into t_text values(null,"貂蝉","女","以连环计离间董卓与吕布,促成董卓覆灭。");

测试结果:

2.修改表的结构---ALTER

修改列类型
    ALTER TABLE 表名 MODIFY 列名 列类型;   -- 注意存在值的情况,类型不一定能成功
增加列
    ALTER TABLE 表名 ADD 列名 列类型;
删除列
    ALTER TABLE 表名 DROP 列名;
列改名
    ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;
更改表名
    ALTER TABLE 表名 RENAME 新表名;
    RENAME TABLE 表名 TO 新表名;

2.1修改列类型

案例: ALTER TABLE 表名 MODIFY 列名 列类型;

alter table t_text modify gender varchar(5) not null;

 类型修改前:

类型修改后:

注意:修改列类型时,需注意值情况,例如:

首先先添加一列:alter table t_text add number int default 0;

然后试着将gender的类型修改为int类型,将number的类型修改为char类型

alter table t_text modify gender int;-- "男"无法修改为int类型

alter table t_text modify number char(2);

alter table t_text modify number int;

所以,修改时需注意列的值是否可以转换为该类型

alter table t_text add number int default 0;
desc t_text;

alter table t_text modify gender int;

alter table t_text modify number char(2);
alter table t_text modify number int;
desc t_text;

alter table t_text drop number;-- 删除列

 刚添加完列:

 修改后:

 2.2增加列

案例:ALTER TABLE 表名 ADD 列名 列类型;

alter table t_text add number int default 0;

 增加列前:

增加列后:



2.3删除列

案例:ALTER TABLE 表名 DROP 列名;

alter table t_text drop number;

删除列后:

2.4更改列名

案例:ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;

alter table t_text change name hero_name varchar(20);

 更改过后:

2.5更改表名

案例:ALTER TABLE 表名 RENAME 新表名;
           RENAME TABLE 表名 TO 新表名;

alter table t_text rename t_test;
raname table t_test to t_text;

将 t_text更改为t_test

 将 t_test更改为t_text

3.sql之DML

3.1增加语句

增加语句:给某张表进行数据插入

语法:

insert INTO table_name[(field1 [, field2 ……]) values(value1 [, vaule2 ……])  [,()]];

# 插入多条数据
insert into t_text VALUES
(null, '赵云', '男', '长坂坡单骑救主,七进七出曹军,刘备麾下五虎上将之一。'),
(null, '马超', '男', '西凉猛将,曾与张飞大战不分胜负,后归顺刘备。'),
(null, '黄忠', '男', '定军山斩杀夏侯渊,老当益壮的五虎上将之一。'),
(null, '周瑜', '男', '东吴大都督,赤壁之战以火攻大破曹操,智勇双全。'),
(null, '吕布', '男', '武力冠绝天下,但反复无常,最终被曹操处决。'),
(null, '貂蝉', '女', '以连环计离间董卓与吕布,促成董卓覆灭。'),
(null, '司马懿', '男', '曹魏权臣,多次抵御诸葛亮北伐,奠定晋朝基业。'),
(null, '孙尚香', '女', '孙权之妹,刘备之妻,性格刚烈,善武艺。'),
(null, '庞统', '男', '号“凤雏”,献计取西川,中箭身亡于落凤坡。'),
(null, '董卓', '男', '残暴军阀,挟持汉献帝,后被吕布刺杀。'),
(null, '张辽', '男', '威震逍遥津,曹魏名将,以少胜多击败孙权。'),
(null, '徐庶', '男', '刘备早期谋士,因母被曹操挟持而被迫归曹。'),
(null, '典韦', '男', '曹操护卫,宛城之战力战身亡,勇猛过人。'),
(null, '许褚', '男', '曹操虎卫,赤膊战马超,以勇力著称。'),
(null, '荀彧', '男', '曹操首席谋士,战略家,后因反对称魏公而自尽。'),
(null, '姜维', '男', '诸葛亮继承人,九伐中原延续蜀汉大业。'),
(null, '邓艾', '男', '曹魏名将,偷渡阴平灭蜀汉,功高震主被杀。'),
(null, '钟会', '男', '与邓艾共灭蜀汉,后谋反失败被杀。'),
(null, '袁绍', '男', '官渡之战败于曹操,北方割据势力首领。'),
(null, '华佗', '男', '神医,为关羽刮骨疗毒,后因曹操猜忌被杀。');

插入单条数据
insert into t_text values(null,"虞姬","女",default); -- 因为存在自增和唯一约束
insert into t_text(hero_name,gender) values("孙权","男");

3.2删除语句和TRUNCATE

注意:请注意删除的条件,如果不带条件,则删除全表数据

语法:

delete from table_name [where 条件];  -- 如果不带条件,清空全表数据
truncate table table_name; -- 清空全表,注:truncate删除数据是不经过数据字典

案例:

delete from t_text where id = 51;
delete from t_text where id = 52;

3.3更新语句

修改表中的数据

语法:

update table_name set 字段1=新值 [, 字段2=新值, 字段3=字段3 + 1]   [where 条件];

案例:

update t_text set deed = "取经绊脚石" where hero_name = "唐僧";
select * from t_text where hero_name="唐僧";

replace语句

该语句是集更新和插入为一体的一个语句。

如果表中没有这条数据,则执行插入,否则执行更新。

# 插入
replace into t_text(id, hero_name, gender, deed) values(100, "红孩儿", "男",default);
select * from t_text where hero_name="红孩儿";

# 更新
replace into t_text(id, hero_name, gender, deed) values(100, "哪吒", "男","风火轮,乾坤圈");
select * from t_text where id=100;


http://www.kler.cn/a/600974.html

相关文章:

  • Linux输入系统应用编程
  • 字符串常量,数组和指针的不同形式
  • uv:Rust 驱动的 Python 包管理新时代
  • 飞书只有阅读权限的文档下载,飞书文档下载没有权限的文件
  • Qt 线程类
  • 详解c++20的协程,自定义可等待对象,生成器详解
  • <tauri><rust><GUI>基于rust和tauri,实现多窗口与窗口间通信
  • ISIS-2 邻居建立关系
  • Python 编程中函数嵌套的相关解析
  • React 中React.memo的作用,如何利用它进行组件性能优化?
  • 单片机中C++的局部static变量的初始化仍然遵循控制流
  • Python爬虫异常处理:自动跳过无效URL
  • 2021年蓝桥杯第十二届CC++大学B组真题及代码
  • Redisson 实现分布式锁简单解析
  • OpenCV的Python开发环境搭建(Windows)
  • 目标和力扣--494
  • Readis自动化部署
  • ReentranLock手写
  • FPGA的直方图均衡
  • Python的线程、进程与协程