真正自己做题时候,会遇到很多很2的情况 比如说 老是插入不进去,发现是数据库设的字符长度不够 有时候是sql语句的问题
--==================================创建数据库===========
--创建数据库的时候,指定一些数据库的相关参数,比如大小,增长方式i、文件保存路径的。 create database School on primary --主数据文件*.mdf ( --数据库的逻辑名称 name='School', size=10mb, filename='c:\school.mdf', filegrowth=10%, maxsize=100mb ) log on --日志文件*.ldf ( name='School_log', filename='c:\school.ldf', size=5mb, filegrowth=2mb, maxsize=50mb ) --删除数据库 DROP DATABASE SCHOOL; --切换数据库 use School--==================================为数据库创建表===========
create table TblClass
( --创建好了一列 --列名,数据类型、约束(自动编号、主键、外键、默认值等等) ClsId int identity(1,1) primary key, ClsName varchar(50) not null, ClsDesc varchar(500) ) --删除TblClass表 drop table TblClass====--创建一个TblStudent表
create table [TblStudent] ( stuId int identity(1,1) primary key, stuName nvarchar(50) not null, stuGender bit not null, stuAddress varchar(200), stuPhone varchar(50), stuAge int, stuBirthday datetime, stuIdNumber varchar(20),--身份证号码 stuClsId int )====--通过sql语句向TblClass表中插入数据 insert into TblClass(ClsName,ClsDesc) values('黑马三期','没有有二期NB')----当向表中的除自动编号外的所有其他列都插入数据的时候,这时可以省略列名
===--跨数据库表拷贝表 跨数据库访问: 数据库..表名 select * into myteacher from School..TblTeacher sp_tables: 数据库中的所有表===--3.为自动编号插入数据 set IDENTITY_INSERT TblTeacher on insert into TblTeacher(tid,tname,tsalary) values(100,'bob',500000) set IDENTITY_INSERT TblTeacher off====--union关键字本身就具有去掉重复的意思。 --union \ union all insert into TblTeacher select 'Chris',1,20,2000000,'1999-9-9' union all select 'James',1,20,2000000,'1990-9-9' union all select 'James',1,20,2000000,'1990-9-9' union all select 'James',1,20,2000000,'1990-9-9' union all select 'Tom',1,20,2000000,'1920-9-9' union all select 'Tom',1,20,2000000,'1920-9-9' union all select 'Tom',1,20,2000000,'1920-9-9' union all select 'Tom',1,20,2000000,'1920-9-9' ====修改表 alter table t2 ( stuId int identity(1,1) primary key, name nvarchar(50) ) 修改列:alter table T3 alter column userName nvarchar(50) --向一个已经存在的表中插入数据,数据的来源是另外一张表。 insert into NewTblTeacher(tname,tage) select tname,tage from TblTeacher ===主键 ========================== 1.主键的作用: 保证表中的每条数据的唯一性。 =======主键的特点======== 1.主键不能重复 2.主键不能为空 ======主键的分类===== 1>逻辑主键(选择为表中增加的那些“自动编号”列或者"GUID"列为主键(没有实际业务上的意义))的主键,叫做逻辑主键。(建议使用逻辑主键) 2>业务主键(选择表中那些在业务中有实际意义的列作为主键,叫做业务主键。) ======组合主键(不建议使用)========= 同时选择多列作为一个主键,叫做组合主键。(复合主键) (组合主键一般不建议使用。)==========选择主键的策略,选什么样的列作为主键=====
1>.主键,建议选择那些一般不会被修改的列。 2>选择单列,不要选择多列(不用组合主键) 3>选择那些简单列(整数列(自动编号),)--=========================更新语句-----------------把表中所有的年龄为19岁的同学的姓名两边加个★,性别=女,工资都+500,
--SQL 2008 可以写成tsalary+=500,但是尽量用通用的语法 tsalary=tsalary+500 update TblTeacher set tname='★'+tname+'★',tgender=0,tsalary=tsalary+500 where tage=19 替换 update TblTeacher set tname=replace(tname,'★','☆') where tage=19 and tgender=0 --REPLACE ( string_expression , string_pattern , string_replacement )=====删除 delete from TblTeacher where tage=19 or tage is null --=======使用delete from 表名 与truancate table 表名,都能把表中的数据全部删除-======--区别:--1.delete 语句删除数据的时候,自动编号没有恢复到默认值。但是truancate语句重新设置了自动编号--2.通过truncate语句删除表中的数据的时候,只能一次性都清空,不能根据条件来删除,而delete可以根据条件来删除。--3.truncate语句清空表中的数据时,速度(性能)比delete语句快的多的多的多。--4..truncate语句不触发delete触发器。