郑州网站建设361,白云做网站的公,为什么不建议学嵌入式,宝塔wordpress更换域名MYSQL数据库的数据类型(一般只需要用到这些)
整型类型#xff1a;用于存储整数值#xff0c;可以选择不同的大小范围来适应特定的整数值。
TINYINTSMALLINTMEDIUMINTINTBIGINT
浮点型类型#xff1a;用于存储带有小数部分的数值#xff0c;提供了单精度#xff08;FLOA…MYSQL数据库的数据类型(一般只需要用到这些)
整型类型用于存储整数值可以选择不同的大小范围来适应特定的整数值。
TINYINTSMALLINTMEDIUMINTINTBIGINT
浮点型类型用于存储带有小数部分的数值提供了单精度FLOAT和双精度DOUBLE两种浮点数类型。
FLOATDOUBLE
定点数类型用于精确存储十进制数值例如货币或精确计数情况下使用。
DECIMALNUMERIC
日期与时间类型用于存储日期、时间或日期时间组合。
DATETIMEDATETIMETIMESTAMPYEAR
字符串类型用于存储文本和字符数据提供了不同长度和存储方式的选项。
CHARVARCHARBLOBTEXTENUMSET 操作数据 库 相关的语句
数据库创建
create database if not exists 数据库名
default character set utfmb4 -- 字符集
default collate utf8mb4_unicode_ci; -- 排序规则【if not existsdefault character set Xxxdefault collate Xxx】可以选择是否使用字符集 字符集不同数据库的存储和显示结果可能不同如utf8mb3可以存储中文但不能存储一些特殊字符如表情符号。utf8mb4就可以表情符号。 排序规则对字符进行排序使用的规则 比如不同排序规则对中文的标准可能不同像【一二三】这些数据a规则可能将他们排为【一二三】b规则可能将他们排为【三一二】 数据库删除
drop database if exists 数据库;【if exists】可以选择是否使用 数据库修改
-- 修改数据库的character set
alter database 数据库 character set utf8mb4;
-- 修改数据库的collate
alter database 数据库 collate utf8mb4_general_ci;数据库选择
use 数据库操作数据 表 的相关的语句
数据表创建
CREATE TABLE IF NOT EXISTS 数据库.数据表 (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,age INT DEFAULT 18,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,active BOOLEAN DEFAULT TRUE,salary DECIMAL(10,2) DEFAULT 0.00,CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES department(id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci;IF NOT EXISTS用于检查是否存在同名的表如果不存在则创建。AUTO_INCREMENT使 id字段自动增长并将其设置为主键。CHARACTER SET utf8mb4设置name 字段的字符集。COLLATE utf8mb4_general_ci设置name 字段的排序规则。NOT NULL确保 name 字段不为空。DEFAULT 18设置 age 字段的默认值为18。UNIQUE确保 email 字段的值是唯一的。DEFAULT CURRENT_TIMESTAMP设置 created_at字段的默认值为当前时间戳。BOOLEAN DEFAULT TRUE设置 active 字段的默认值为 TRUE。DECIMAL(10,2) DEFAULT 0.00设置 salary 字段的数据类型为 DECIMAL精度为 10 位小数位为 2位默认值为 0.00。CONSTRAINT fk_department FOREIGN KEY (department_id)REFERENCES department(id)定义了外键约束将 department_id 字段作为外键关联到department 表的 id 字段。ENGINEInnoDB设置表的引擎为 InnoDB。DEFAULT CHARSETutf8mb4默认字符集为 utf8mb4。COLLATEutf8mb4_general_ci排序规则为utf8mb4_general_ci。 数据表修改
添加新列ALTER TABLE table_name ADD COLUMN column_name column_type;
修改现有列:ALTER TABLE table_name MODIFY COIUMN column_name new_column_tyoe;
删除列ALTER TABLE table_name DROP COLUMN column_name;
修改表名ALTER TABLE old_table_name RENAME TO new_table_name;
添加约束条件ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_type(column_name);- constraint_type有:- UNIQUE用于确保列中的所有值都是唯一的。- NOT NULL用于确保列中的值不为空。CHECK用于定义要求满足的条件。
删除约束条件ALTER TABLE table_name DROP CONSTRAINT constraint_name;
添加主键ALTER TABLE table_name ADD CONSTRAINT pk_constraint_name PRIMARY KEY(column_name);
删除主键ALTER TABLE table_name DROP CONSTRAINT pk_constraint_name;
添加外键ALTER TABLE table_name ADD CONSTRAINT fk_constraint_name FOREIGN KEY(column_name) REFERENCES other_table(other_column);
删除外键ALTER TABLE table_name DROP CONSTRAINT fk_constraint_name;数据表删除
完全删除数据表DROP TABLE table_name;
仅删除数据表中的数据保留数据表的结构TRUNCATE TABLE table_name;单表数据增删改查的语句
插入数据
INSERT INTO table_name(column1, column2, ...) VALUES (value1, value2, ...);更新数据
UPDATE table_name SET column1 value1, column2 value2, ... WHERE condition;删除数据
DELETE FROM table_name WHERE condition;查询数据
SELETE column1, column2, ... FROM table_name WHERE condition;condition的写法
1.等于Equal to:WHERE column value
2.不等于Not Equal toWHERE column value
3.大于Greater thanWHERE column value
4.小于Less thanWHERE column value
5.大于等于Greater than or equal toWHERE column value
6.小于等于Less than or equal toWHERE column value
7.包含INWHERE column IN (value1, value2, ...)
8.不包含NOT INWHERE column NOT IN (value1, value2, ...)
9.模糊匹配LIKEWHERE column LIKE pattern
10.范围BETWEENWHERE column BETWEEN value1 AND value2
11.空值IS NULLWHERE column IS NULL
12.非空值IS NOT NULLWHERE column IS NOT NULL多表联查的SQL语句
以例子演示表结构如下
studentsstudent_idstudent_nameteachersteacher_idteacher_namecoursescourse_idcourse_nameteacher_idscoresstudent_idcourse_idscore 表数据
内连接Inner Join连接学生、课程和成绩表找出每个学生所修的课程及成绩
SELECT students.student_name, courses.course_name, scores.score
FROM students
INNER JOIN scores ON students.student_id scores.student_id
INNER JOIN courses ON scores.course_id courses.course_id;左连接Left Join列出每门课程及其对应的老师即使没有老师也要显示出来
SELECT courses.course_name, teachers.teacher_name
FROM courses
LEFT JOIN teachers ON courses.teacher_id teachers.teacher_id;联合查询Union
1、将学生表和教师表的姓名合并为一个结果集
SELECT student_name as name FROM students
UNION
SELECT teacher_name as name FROM teachers;2、将学生、教师和课程表的姓名合并为一个结果集
SELECT student_name as name FROM students
UNION
SELECT teacher_name as name FROM teachers
UNION
SELECT course_name as name FROM courses;右连接Right Join列出每个老师及其对应的课程即使没有课程也要显示出来
SELECT teachers.teacher_name, courses.course_name
FROM teachers
RIGHT JOIN courses ON teachers.teacher_id courses.teacher_id;多重连接Multiple Joins连接学生、课程、教师和成绩表找出每个学生所修的课程、对应的老师和成绩
SELECT students.student_name, courses.course_name, teachers.teacher_name, scores.score
FROM students
INNER JOIN scores ON students.student_id scores.student_id
INNER JOIN courses ON scores.course_id courses.course_id
INNER JOIN teachers ON courses.teacher_id teachers.teacher_id;分组联查Group By统计每门课程的平均成绩
SELECT courses.course_name, AVG(scores.score) as average_score
FROM courses
LEFT JOIN scores ON courses.course_id scores.course_id
GROUP BY courses.course_name;带有条件的联查Join with Where Clause找出某个学生所修的所有课程及成绩
SELECT students.student_name, courses.course_name, scores.score
FROM students
INNER JOIN scores ON students.student_id scores.student_id
INNER JOIN courses ON scores.course_id courses.course_id
WHERE students.student_name John;子查询Subquery找出每位学生的平均成绩并与学生信息进行关联
SELECT students.student_name, average_score
FROM students
LEFT JOIN (SELECT student_id,AVG(score) as average_scoreFROM scoresGROUP BY student_id
) AS subquery
ON students.student_id subquery.student_id;多重连接和条件Multiple Joins with Conditions找出每门课程及其对应的老师、学生选修情况和成绩
SELECT courses.course_name, teachers.teacher_name, students.student_name, scores.score
FROM courses
LEFT JOIN teachers ON courses.teacher_id teachers.teacher_id
LEFT JOIN scores ON courses.course_id scores.course_id
LEFT JOIN students ON scores.student_id students.student_id;多种连接类型组合Combining Different Join Types列出所有学生、他们所修的课程及成绩即使没有成绩也要显示学生和课程信息
SELECT s.student_name, c.course_name, COALESCE(sc.course, No score) as score
FROM student s
CROSS JOIN courses c
LEFT JOIN score sc ON s.student_id sc.student_id AND c.course_id sc.course_id;联合查询与排序Union with Ordering将学生和老师姓名合并并按字母顺序排序
SELECT name FROM (SELECT student_name as name FROM studentsUNIONSELECT teacher_name as name FROM teachers
) AS combined_names
ORDER BY name ASC;多表联查与分组筛选Join with Grouping and Filtering统计每个老师所教课程数超过1门的情况
SELECT teachers.teacher_name, COUNT(courses.course_id) as num_courses_taught
FROM teachers
LEFT JOIN courses ON teachers.teacher_id courses.teacher_id
GROUP BY teachers.teacher_name
HAVING COUNT(courses.course_id) 2;左连接与条件筛选Left Join with Conditional Filter找出没有分配老师的课程
SELECT courses.course_name
FROM courses
LEFT JOIN teachers ON courses.teacher_id teachers.teacher_id
WHERE teachers.teacher_id IS NULL;多表联查与排名Join with Ranking按照成绩排名找出每门课程的前三名学生
SELECT course_name, student_name, score, ranking
FROM (SELECT courses.course_name,students.student_name,scores.score,RANK() OVER (PARTITION BY courses.course_id ORDER BY scores.score DESC) AS rankingFROM courses INNER JOIN scores ON scores.course_id courses.course_idINNER JOIN students ON students.student_id scores.student_id
) AS ranked_scores
WHERE ranking 3;联合查询与条件过滤Union with Conditional Filtering将学生和老师姓名合并并只显示姓氏为“Smith”的人员
SELECT name FROM (SELECT student_name as name FROM students WHERE student_name LIKE Smith%UNIONSELECT teacher_name as name FROM teachers WHERE teacher_name LIKE Smith%
) AS combined_names;MYSQL函数
-- 数学运算
SELECT abs(-10);/*绝对值0*/
SELECT ceiling(9.4);/*向上取整10*/
SELECT floor(9.4);/*向下取整9*/
SELECT rand();/*生成随机数,0~10.40571950134422585*/
SELECT sign(122);/*值为0返回0值为正数返回1值为负数返回-11*/
-- 字符串相关操作
SELECT char_length(123456789);/*获取值的长度9*/
SELECT concat(a,b,c);/*拼接字符串abc*/
SELECT insert(1234567,1,2,a);/*根据位置替换字符串,从第1个位置开始的2个数替换为aa34567*/
SELECT lower(Abc);/*小写abc*/
SELECT upper(Abc);/*大写ABC*/
SELECT replace(12345678,345,abc);/*根据内容替换字符串,把345替换为abc12abc678*/
SELECT substr(123456,2,2);/*返回第2个位置开始的2个数23*/
SELECT instr(1234567,456);/*返回456的第一次的位置,找不到返回04*/
SELECT reverse(123456);/*反转654321*/
-- 日期和时间函数
SELECT current_date();/*获取当前日期2024-05-31*/
SELECT curdate();/*获取当前日期2024-05-31*/
SELECT now();/*获取当前时间2024-05-31 11:28:04*/
SELECT localtime();/*获取当前时间2024-05-31 11:28:24*/
SELECT sysdate();/*获取当前时间2024-05-31 11:28:44*/
SELECT year(now());/*获取当前年份2024*/
SELECT month(now());/*获取当前月份5*/
SELECT date(now());/*获取当前日期2024-05-31*/
SELECT hour(now());/*获取当前小时11*/
SELECT minute(now());/*获取当前分钟32*/
SELECT second(now());/*获取当前秒数56*/
-- 聚合函数
USE test;
-- count(...) 对查询到的数据进行统计
SELECT COUNT(1) FROM students;
-- SUM(...) 对查询到的数据进行求和,如果数据不能求和字符串,返回0
SELECT SUM(scores.score) FROM scores;
-- AVG(...) 对查询到的数据进行求平均值
SELECT AVG(scores.score) FROM scores;
-- MAX(...) 返回查询到的数据的最大值
SELECT MAX(scores.score) FROM scores;
-- MIN(...) 返回查询到的数据的最小值
SELECT MIN(scores.score) FROM scores;