SQL基础-建表
一、建表
1、创建表的两种方式
*客户端工具 *SQL语句
2、使用SQL语句创建表
表名和字段名不能使用中文;(一般为字母开头,字母、数字、下划线组成的字符串); CREATE TABLE关键字后跟上表名,字段名在括号中列出且以逗号分隔; 最后以分号结尾; 不区分大小写,但最好关键字都大写;按一定的规则缩进; 每个字段都需要设置数据类型; 常用的数据类型有以下几个大类:
字符类
数值类
日期和时间类
二进制类
3、常见的数据类型
字符串数据类型
数据类型的两个作用:
存储什么数据
如何储存 字符串数据类型:
姓名
身份证
家庭地址
电话号码
书名
电脑型号 所有的文字都是字符,都可以使用字符串数据类型来存储! 定长字符串:
长度固定的字符串类型,其长度是在创建表时指定的。比如邮政编码‘510623’,是6位的字符。 如果向一个6位的定长字符串类型的字段,只插入2位字符,则数据库默认会在2个字符末尾补4个空格,以补足6位。 不定长字符串:
长度不固定的字符串类型,创建表时指定一个最大长度,或不指定长度。比如姓名,有2位、3位、4位甚至更长的。
比如:‘冯巩’、‘周杰伦’、‘仓央嘉措’、‘库尔班-热合曼’。 定长字符串优缺点:
优点:处理性能高,产生较少的存储碎片
缺点:占用存储多 不定长字符串优缺点:
优点:占用存储少
缺点:处理性能低,产生较多存储碎片
CHAR(10)和VCHAR(10):
首先明确的是,char的长度是不可变的,而varchar的长度是可变的; 定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,
而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的; char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,
因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的; char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符
占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据; VARCHAR虽然比CHAR节省空间,但是如果一个VARCHAR列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,
而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR会更好一些。
数值数据类型
所有的定量的数值,都可以用数值数据类型来存储! 如:
年龄
身高
厚度
速度
利率
人数 整数数值:
不带小数点的数值。比如,中国有4个直辖市,2016年深圳市常住人口有11988400人; 小数数据值:
带小数点的数值。比如,珠穆朗玛峰高度8844.43米,一年期定期存款利率2.75%;
日期和时间数据类型
如:
报名日期
国庆节
下班时间
下单时间
秒表记时
时间间隔 日期:
只包含年、月、日的日期。比如,中华人民共和国建国日期是1949年10月1日; 时间:
包含时、分、秒、毫秒的时间。比如,工作日上班时间08:30:00; 日期+时间:
包含年、月、日、时、分、秒、毫秒的日期和时间。比如,从银行取出1000元现金的时间是2017年9月2日12:35:11.734
二进制数据类型
如:
图片
多媒体图像
文档
4、设置字段默认值
为什么要为字段设置默认值?
当插入数据但不想或不需要对某个字段赋值时,如果字段有设置默认值,则会以默认值来填充该字段的值而不会导致错误;比如,在网上下订单时,
对于下订单日期字段,可以使用数据库的系统变量“当前日期”,这样就不需要在下订单时,单独再对下订单日期字段进行赋值; 提高使用性能;如果一个字段不赋值,那么这个字段就会被赋NULL值,会影响使用性能; 使用SQL语句设置字段默认值:关键字DEFAULT 设置默认值需要注意的几个问题:
表中所有的字段都可以设置默认值; 默认值的数据类型必须与字段保持一致;(不一致时,数据库虽然有时也会默认做隐式类型转换,但并不推荐这样做。
一方面是这样做并不规范,另一方面是这样做可能会导致未知的错误); 除主键字段外,建议其他所有字段都设置默认值; 如何赋默认值?
用mysql建数据表设置默认值: int 类型:default 1; (直接加数值) varchar类型:default 'aaa'(用单引号)
二、建表
1、设置注释
使用SQL语句设置字段默认值:关键字COMMENT CREATE TABLE teacher
(
teacher_id varchar(20) COMMENT ‘老师编号’,
teacher_name varchar(50) COMMENT ‘老师姓名’,
gender varchar(10) COMMENT ‘性别’
) COMMENT ‘老师’; 假如对一张已经存在的表添加注释,可以使用ALTER TABLE关键字:alter table teacher comment '老师’;
2、设置默认值
为什么要设置默认值?
对于刚才的例子,我们在CSDN网站上注册一个新用户时,除了用户名、密码、手机号外,还有一些非必填信息,比如性别、QQ号、职业等。
这些信息如果没有填写,那向数据库插入时,就可以使用NULL值替代。 如果性别、QQ号、职业等,这些字段被设置为NOT NULL,不可以插入NULL值,那怎么办? 如何设置默认值?使用DEFAULT关键字。
CREATE TABLE teacher
(
teacher_id varchar(20)
teacher_name varchar(50) efault ‘’,
gender varchar(10)
); 设置默认值需要注意的几个问题:
表中所有的字段都可以设置默认值; 默认值的数据类型必须与字段保持一致;(不一致时,数据库虽然有时也会默认做隐式类型转换,但并不推荐这样做。
一方面是这样做并不规范,另一方面是这样做可能会导致未知的错误) 除主键字段外,建议其他所有字段都设置默认值; 常用默认值:
字符型:
空字符串 ''
数值型:
0、1
日期和时间型:
'1900-01-01'
'0001-01-01'
'9999-12-31'
'00:00:00’
CURRENT_DATE
3、设置主键
主键:唯一标识表中每一行的某一列或多列。使用PRIMARY KEY关键字定义。 CREATE TABLE teacher
(
teacher_id
teacher_name
gender
primary key ( teacher_id )
); 主键的特点:
一个表只能有一个主键; 一个表中的所有行,主键字段的值不允许重复;主键的作用是保证数据的唯一性和完整性; 主键字段可以为多个,甚至是表中所有字段一起做主键;多个字段一起做主键时,我们称为联合主键或重复主键;不过一般来说不会超过5个,否则会影响操作性能; 允许为NULL的字段不能做主键字段;主键不应包含动态变化的数据; 主键字段不允许更新?? 永远也不要更新主键的值;
4、特殊的NULL
在创建表时,对于表中的每个字段,可以指定字段是否必须包含值。对于可以不包含值的字段,可以向字段中插入NULL值。 CREATE TABLE teacher
(
teacher_id varchar(20) NOT NULL,
teacher_name varchar(50) NOT NULL,
gender varchar(10) NULL
); 每个字段,要么是NOT NULL,要么是可为NULL。创建表时,可以不指定,默认情况下是可为NULL,也就是可以不包含值。 NULL是什么?
NULL ≠ 0
≠ 空格
≠ 空字符串‘’
≠ NULL null 它用来表示一种“不知道”、“不确定”的状态。 NULL有什么用?
比如,我们在CSDN网站上注册一个新用户时,除了用户名、密码、手机号外,还有一些非必填信息,比如性别、QQ号、职业等。
这些信息如果没有填写,那向数据库插入时,就可以使用NULL值替代。 如何判断某个字段的值是否为NULL?
CREATE TABLE teacher
(
teacher_id varchar(20) NOT NULL,
teacher_name varchar(50) NOT NULL,
gender varchar(10) NULL
); gender is null
gender is not null 关于NULL值使用时的一些建议:
允许NULL值的字段,不能作为主键字段; 尽量避免将字段设置为可为NULL,事实上,应该定下规范,所有字段都必须设置为NOT NULL;
SQL基础-建表的更多相关文章
- sql语句建表,并且自增加主键
sql语句建表,并且自增加主键 use [test] CREATE TABLE [dbo].[Table_4] ( [userid] [int] IDENTITY(1,1) NOT NULL, CON ...
- sql sever 基础 建表
---恢复内容开始--- SQL Sever 基础以创建银行数据库bankDB为案例 1.创建数据库 1-1 创建文件夹用以存放数据库 1-2 创建建库bankDB 2.创建数据库 2-1.创建用户信 ...
- SQL基础-连接表
一.连接表 1.SQL JOIN 忘记在哪保存的某位网友的图,先明白SQL JOIN, 2.关于笛卡尔积 笛卡尔积: 两个集合的乘积 重新建student表和teacher表: student表: C ...
- SQL基础-操纵表及插入、查询
一.操纵表 1.表的关键信息 2.更新表名 更新表名:使用RENAME TABLE关键字.语法如下: RENAME TABLE 旧表名 TO 新表名; 比如,生产环境投产前备份teacher表,使用如 ...
- SQL 查询建表SQL
1.新建一个查询语句,按执行按钮 2.结果页面会显示一条sql语句,复制该语句即可建表 3.建表测试
- 解决方案 -SQL脚本建表产生ORA-00942错误
一.问题简介 1.开发环境 操作系统:win10 数 据 库:Oracle11g 数据库连接工具:Navicat Premium 2.问题简述 在使用SQL Development.Navicat ...
- SQL Server建表和增删改
create database 数据库名 go --穿件完成 go create table 表名(列名 类型, 列名 类型, 列名 类型 --最后一个列名不加逗号) go --创建完成go 以创建表 ...
- 常用的sql标准建表语句
使用指定数据库 use v4base 建一张表 /*************************************************************************** ...
- 使用SQL语句建表,插入数据
--选中数据库,点击新建查询,然后执行即可--这是SQL中的注释信息,使用两个减号来注释. drop table Book --删除表Book create table Book --创建表Book ...
随机推荐
- 【Maven基础入门】02 了解POM文件构建
温故 上一节我们说过:Maven 是一个基于POM文件的构建工具,当然离不开POM文件 POM文件是一个XML标记语言表示的文件,文件就是:pom.xml 一个POM文件包含了项目的基本信息,用于描述 ...
- ssm框架 pom的配置 / 还有里面springMVC.xml的配置 / webapp.xml的配置
首先是pom的配置: <dependencies> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-jav ...
- C#关键字:static
一.static关键字 下面我设计了一个房贷利率上浮类(用来计算房贷利率上浮多少): public class InterestRateGoUp { public InterestRateGoUp() ...
- flickity:支持触摸滑动,响应迅速的幻灯片轮播插件
简介:flickity 是一个支持触摸,响应迅速的幻灯片轮播插件.支持环绕滑动.自由滑动.组滑动.自动播放.延迟加载.视差滑动.图片滑动.兼容IE10+, Android 4+, Safari for ...
- 复杂dic的文件化存储和读取问题
今天遇到一个难题.整出一个复杂的dic,里面不仅维度多,还含有numpy.array.超级复杂.过程中希望能够存储一下,万一服务器停了呢?万一断电了呢? 结果存好存,取出来可就不是那样了.网上搜索了很 ...
- 【i.MX6UL/i.MX6ULL开发常见问题】单独编译内核,uboot生成很多文件,具体用哪一个?
[i.MX6UL/i.MX6ULL开发常见问题]2.3单独编译内核,uboot生成很多文件,具体用哪一个? 答:内核编译出来的文件是~/MYiR-imx-Linux/arch/arm/boot/目录下 ...
- Windows10 上安装 Anaconda 后命令提示符(cmd)下无法执行(python / pip)命令解决方案
原文:https://blog.csdn.net/qq_38644840/article/details/85064408 安装Anaconda后一段时间内能够在命令提示符(cmd)界面运行pytho ...
- Java 之 设计模式——代理模式
设计模式——代理模式 一.概述 1.代理模式 (1)真实对象:被代理的对象 (2)代理对象:代理真实对象的 (3)代理模式:代理对象代理真实对象,达到增强真实对象功能的目的 二.实现方式 1.静态代理 ...
- 【DBAplus】SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势
原创 2016-09-12 韩锋 作者介绍 韩锋,宜信技术研发中心数据库架构师.精通多种关系型数据库,曾任职于当当网.TOM在线等公司,曾任多家公司首席DBA.数据库架构师等职,多年一线数据库架构. ...
- Spring IOC 总结
IOC 简介 IOC是(Inversion of Control,控制反转)的简写.Spring提供IOC容器,将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的的过度程序耦合.它由DI( ...